From e5b394ffa8f4dda5b1f77244754cd1aabb9fac9c Mon Sep 17 00:00:00 2001 From: "Chris K.Y. FUNG" <8746768+chriskyfung@users.noreply.github.com> Date: Fri, 27 Dec 2024 19:15:21 +0800 Subject: [PATCH] Updates --- Thumbs.db | Bin 0 -> 13312 bytes about.html | 4 +- assets/images/hanuman.png | Bin 18495 -> 0 bytes assets/images/hanuman.webp | Bin 12988 -> 0 bytes assets/images/radhakrishna.jpg | Bin 56084 -> 0 bytes assets/images/radhakrishna.webp | Bin 15942 -> 0 bytes assets/images/shiva.jpg | Bin 51553 -> 0 bytes assets/images/shiva.thumb.jpg | Bin 4657 -> 0 bytes assets/images/shiva.thumb.webp | Bin 2372 -> 0 bytes assets/images/shiva.webp | Bin 16246 -> 0 bytes ...rom-a-LAMMPS-Simulation-to-Your-Email.html | 11 +- ...or-visual-comparison-of-journal-ranks.html | 11 +- ...A-Folder-Based-On-The-Input-Variables.html | 11 +- ...ference-paper-is-now-available-online.html | 11 +- .../12/My-trip-of-AEPA-2014-conference.html | 11 +- ...in-the-postgraduate-or-research-study.html | 13 +- ...on-Tool-Version-261-has-been-released.html | 11 +- .../11/27/template-OVITO-python-modifier.html | 11 +- .../01/18/Installation-of-Andriod-Studio.html | 11 +- blog/2017/02/26/new-site-is-opened.html | 11 +- blog/2019/10/22/Follow-Me-on-Medium.html | 11 +- blog/2020/06/01/enjoy-our-new-theme.html | 11 +- blog/amp-now.html | 11 +- blog/comp-sci/fuzzy-logic.html | 15 +- blog/index.html | 11 +- ...tall-Chrome-Remote-Desktop-on-Kubuntu.html | 11 +- blog/linux/Useful-Ubuntu-Commands.html | 11 +- ...t-MATLAB-Matrix-to-MS-Office-Equation.html | 11 +- blog/matlab/Working-MATLAB-with-MS-Excel.html | 11 +- blog/matlab/expand-twitter-short-url.html | 11 +- .../file-io-and-file-system-in-matlab.html | 11 +- .../matlab/matlab-packages-and-toolboxes.html | 11 +- blog/page2/index.html | 11 +- blog/page3/index.html | 11 +- blog/page4/index.html | 12 +- blog/page5/index.html | 10 +- ...-with-Contact-Center-AI-Challenge-Lab.html | 13 +- ...Website-on-Google-Cloud-Challenge-Lab.html | 13 +- ...-Docker-Image-to-a-Kubernetes-Cluster.html | 11 +- ...Manage-APIs-with-Apigee-Challenge-Lab.html | 13 +- ...etworks-in-Google-Cloud-Challenge-Lab.html | 13 +- ...ws-Bastion-Host-with-Terraform-on-GCP.html | 13 +- ...tartup-Script-with-Deployment-Manager.html | 11 +- .../qwiklabs/Controlling-Your-Costs-Quiz.html | 11 +- ...Instance-with-a-Remote-Startup-Script.html | 11 +- ...ments-with-Google-Cloud-Challenge-Lab.html | 11 +- ...ernetes-in-Google-Cloud-Challenge-Lab.html | 13 +- ...er-Data-in-Google-Cloud-Challenge-Lab.html | 13 +- ...els-with-Explainable-AI-Challenge-Lab.html | 13 +- ...-Manage_Cloud_Resources-Challenge-Lab.html | 11 +- ...-Cloud-Essential-Skills-Challenge-Lab.html | 11 +- ...-DevOps-in-Google-Cloud-Challenge-Lab.html | 13 +- ...from-Data-with-BigQuery-Challenge-Lab.html | 13 +- ...h-Machine-Learning-APIs-Challenge-Lab.html | 13 +- ...-a-MySQL-Database-to-Google-Cloud-SQL.html | 11 +- ...I-Tasks-in-Google-Cloud-Challenge-Lab.html | 13 +- ...e-Tasks-in-Google-Cloud-Challenge-Lab.html | 13 +- ...d-Application-on-a-Kubernetes-Cluster.html | 11 +- ...oogle-Kubernetes-Engine-Challenge-Lab.html | 13 +- ...ronment-in-Google-Cloud-Challenge-Lab.html | 13 +- ...e-Cloud-Platform-Commands-Cheat-Sheet.html | 11 +- ...ript-for-Labelling-Completed-Qwiklabs.html | 11 +- ...arehouses-with-bigquery-challenge-lab.html | 13 +- ...dentity-in-google-cloud-challenge-lab.html | 13 +- ...oogle-kubernetes-engine-challenge-lab.html | 13 +- .../qwiklab-completion-tracker-versions.html | 13 +- ...ps-for-learning-google-cloud-platform.html | 15 +- ...ss-firebase-development-challenge-lab.html | 13 +- .../qwiklabs/where-does-my-bear-badge-go.html | 11 +- ...-tricks-and-tools-for-tumblr-bloggers.html | 11 +- ...open-graph-image-tag-to-a-tumblr-blog.html | 11 +- ...10-store-app-path-for-default-program.html | 11 +- ...indows10-boot-loop-after-fail-upgrade.html | 13 +- category/academic/index.html | 13 +- category/announcement/index.html | 13 +- category/cloud/index.html | 13 +- category/computer-science/index.html | 13 +- category/developer-tools/index.html | 17 +- category/index.html | 15 +- category/linux/index.html | 13 +- category/project/index.html | 13 +- category/web-development/index.html | 13 +- category/windows/index.html | 13 +- contact.html | 4 +- feed.xml | 413 ++++-------------- .../index.html | 62 +++ gulpfile.mjs | 41 +- .../gh-repo-clone-custom-completion-cover.jpg | Bin 0 -> 138405 bytes ...po-clone-custom-completion-cover.thumb.jpg | Bin 0 -> 24238 bytes ...o-clone-custom-completion-cover.thumb.webp | Bin 0 -> 16270 bytes ...gh-repo-clone-custom-completion-cover.webp | Bin 0 -> 93436 bytes index.html | 11 +- privacy-policy.html | 13 +- search.html | 13 +- sitemap.xml | 19 +- tag/android-studio/index.html | 13 +- tag/apigee/index.html | 13 +- tag/autocompletions/index.html | 49 +++ tag/bash/index.html | 49 +++ tag/bigquery/index.html | 13 +- tag/changelog/index.html | 13 +- tag/cloud-ai/index.html | 13 +- tag/cloud-function/index.html | 13 +- tag/command-line/index.html | 17 +- tag/computer-science/index.html | 13 +- tag/conference-paper/index.html | 13 +- tag/conference/index.html | 13 +- tag/custom-theme/index.html | 13 +- tag/data-science/index.html | 13 +- tag/docker/index.html | 13 +- tag/email/index.html | 13 +- tag/file-i-o/index.html | 13 +- tag/fuzzy-logic/index.html | 13 +- tag/gcloud/index.html | 13 +- tag/github-cli/index.html | 49 +++ tag/google-cloud/index.html | 13 +- tag/how-to-research/index.html | 13 +- tag/index.html | 15 +- tag/jekyll/index.html | 13 +- tag/jenkins/index.html | 13 +- tag/journal-ranks/index.html | 13 +- tag/kde/index.html | 13 +- tag/kubernetes/index.html | 13 +- tag/lammps/index.html | 13 +- tag/learning-map/index.html | 13 +- tag/linux/index.html | 13 +- tag/logbook/index.html | 13 +- tag/machine-learning/index.html | 13 +- tag/matlab/index.html | 13 +- tag/medium/index.html | 13 +- tag/meta-tags/index.html | 13 +- tag/molecular-dynamics/index.html | 13 +- tag/ms-excel/index.html | 13 +- tag/ms-office/index.html | 13 +- tag/mysql/index.html | 13 +- tag/open-graph/index.html | 13 +- tag/ovito/index.html | 13 +- tag/python/index.html | 13 +- tag/qwiklabs/index.html | 13 +- tag/remote-desktop/index.html | 13 +- tag/research-tool/index.html | 13 +- tag/research/index.html | 13 +- tag/secure-vpc/index.html | 13 +- tag/shorthand/index.html | 13 +- tag/single-crystal-diamond/index.html | 13 +- tag/taiwan/index.html | 13 +- tag/ted/index.html | 13 +- tag/tensorflow/index.html | 13 +- tag/terraform/index.html | 13 +- tag/tumblr/index.html | 13 +- tag/twitter/index.html | 13 +- tag/ubuntu/index.html | 13 +- tag/user-tips/index.html | 13 +- tag/userscript/index.html | 13 +- tag/windows-10/index.html | 13 +- tag/windows-server/index.html | 13 +- tag/wordpress/index.html | 13 +- tag/wsl2/index.html | 13 +- 158 files changed, 1135 insertions(+), 1259 deletions(-) create mode 100644 Thumbs.db delete mode 100644 assets/images/hanuman.png delete mode 100644 assets/images/hanuman.webp delete mode 100644 assets/images/radhakrishna.jpg delete mode 100644 assets/images/radhakrishna.webp delete mode 100644 assets/images/shiva.jpg delete mode 100644 assets/images/shiva.thumb.jpg delete mode 100644 assets/images/shiva.thumb.webp delete mode 100644 assets/images/shiva.webp mode change 100755 => 100644 blog/2020/06/01/enjoy-our-new-theme.html create mode 100644 github-cli-repo-clone-custom-completion/index.html create mode 100644 images/posts/coding/gh-repo-clone-custom-completion-cover.jpg create mode 100644 images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg create mode 100644 images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp create mode 100644 images/posts/coding/gh-repo-clone-custom-completion-cover.webp create mode 100644 tag/autocompletions/index.html create mode 100644 tag/bash/index.html create mode 100644 tag/github-cli/index.html diff --git a/Thumbs.db b/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..3115b0e7134daae52da2087e2fbc1d4e6e04a176 GIT binary patch literal 13312 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 EH#yB2KmY&$ literal 0 HcmV?d00001 diff --git a/about.html b/about.html index ed1c3f6d9..0b201fcec 100644 --- a/about.html +++ b/about.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -14,7 +14,7 @@ <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">About</h1> <div class="article-post"> <div class="row post-top-meta"> <div class="col-md-2"> <amp-img class="author-thumb i-amphtml-layout-fixed i-amphtml-layout-size-defined" src="https://www.gravatar.com/avatar/abd876486b2caa54b43bf64a5a86f620?s=250&d=mm&r=x" width="72" height="72" alt style="width:72px;height:72px;" i-amphtml-layout="fixed"></amp-img> </div> <div class="col-md-10"> <a target="_blank" class="link-dark" href="https://en.gravatar.com/chrisfungky"></a><a target="_blank" href="https://www.facebook.com/chriskyfung/" class="btn follow">Follow</a> <span class="author-description">Author of this blog, M.Phil.</span> </div> </div> <p>Hi, my name is Chris KY FUNG, an individual researcher in Engineering living in Hong Kong. Well, I am not a proficient programmer, but I frequently code for my engineering research projects. I mainly used MATLAB when I was studying my MPhil in Computational Intelligence. After graduated, I had participated research on atomistic simulation of material processing with molecular dynamics (MD) for six years. To conduct such huge simulations, I had to deal and play with Linux servers and High-Performance Computing (HPC). My job also included developing models and data analysis with various programming languages.</p> <p>Being the exploration of molecular dynamics simulations, I am lucky to touch and use the high-performance computing (HPC) facilities in our university. I believe that HPC will be an essential weapon for various areas, including research, finance, business, etc. Thanks for the efforts of many researchers who developed the codes and tools, which make us more easily analyze and/or simulate the experimental data. I wish I will be able to deliver my research outputs and contribute to the successive development in HPC applications for science too.</p> <p>The research experience lets me know that programming and computer skills become increasingly important for a wide variety of student and research projects. Many students and researchers are, however, lack of a strong background in computer programming. The computer issues kill a lot of their time and energy, when they have to review papers, conduct experiments, and writing reports and theses. This GitHub Page is to share my programming and computer skills as well as research experience for solving their headaches.</p> <p><br></p> <p><i class="fa fa-id-card-o"></i> <strong>Public Profiles:</strong></p> <ul> <li><i class="fa fa-graduation-cap"></i> <a href="https://scholar.google.com.hk/citations?user=UxJpoYcAAAAJ"><strong>Google Scholar</strong></a></li> <li><i class="fas fa-flask"></i> <a href="https://www.qwiklabs.com/public_profiles/c2765684-379a-4aa7-89bc-0182cc5a01be"><strong>Qwiklabs</strong></a></li> <li><i class="fab fa-microsoft"></i> <a href="https://docs.microsoft.com/en-us/users/chriskyfung/"><strong>Microsoft Learn</strong></a></li> -</ul> <hr> <p>I am also a maker and the founder of a local community, called <a href="https://craftweeks.com/en/">Craftweeks</a>. You may also visit craftweeks.com and <a href="https://www.youtube.com/channel/UCGlT2itihZuRxMckNcfcA3A">the YouTube channel</a>, if you’re interested in designing and making things.</p> <h2 id="vision">Vision</h2> <p>Computer programming is one important ability necessary for scientific research. It is not only useful in data analytics and simulations, but also helpful to automate and streamline our daily and research tasks.</p> <p>I hope all of us can share ideas, codes, tips here, and collaborate to make our programming tasks easier soon.</p> </div></main> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</ul> <hr> <p>I am also a maker and the founder of a local community, called <a href="https://craftweeks.com/en/">Craftweeks</a>. You may also visit craftweeks.com and <a href="https://www.youtube.com/channel/UCGlT2itihZuRxMckNcfcA3A">the YouTube channel</a>, if you’re interested in designing and making things.</p> <h2 id="vision">Vision</h2> <p>Computer programming is one important ability necessary for scientific research. It is not only useful in data analytics and simulations, but also helpful to automate and streamline our daily and research tasks.</p> <p>I hope all of us can share ideas, codes, tips here, and collaborate to make our programming tasks easier soon.</p> </div></main> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/assets/images/hanuman.png b/assets/images/hanuman.png deleted file mode 100644 index b7836ad09c9f63aed343ff343c0f48094c6e0719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18495 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 R3_Sn<002ovPDHLkV1i2cha&(0 diff --git a/assets/images/hanuman.webp b/assets/images/hanuman.webp deleted file mode 100644 index 5199b8e0539b4db8efe12607ed138ac989087212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12988 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 diff --git a/assets/images/radhakrishna.jpg b/assets/images/radhakrishna.jpg deleted file mode 100644 index 44420778415997f67c0883774b208d59b0ca5faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56084 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	MJ)!GGnzHL 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 diff --git a/assets/images/radhakrishna.webp b/assets/images/radhakrishna.webp deleted file mode 100644 index 532bbecd010eb9cdce2961a530bf8ca876652dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15942 zcmV-MKDohCNk&FKJ^%n$MM6+kP&gnmJ^%oa1p=J`D)I!#0zQ#QpG>K$CnccMNSLq^ z31@En5R{7JybU3uzWe{f^PP0`pZq+!e`o*x<ZAY4mHmA_4tm^m=1hMN?-%DB<exO- zvzQlV=Qr<P@N>}T4eGbf*PJJvX8m^chDPVjKi&EZ`HyP4xUrY<8<D$Z;3@3x7M=6V zrwM#e{x72c3~%c6Klox4oPYE7ZlozCFX#V1X6izcJ5qGx|DUs6Qgq}0pR;u!{Kt0_ z8+9Q`DStj@4bq$9w`zVltBPkqBYdd-R6o<2GNu2`i54+lQ5>caS+ae(5GvzbuQz$n zMH{-@Kz}29DIr{Sb1v%08P$(4k;p6qkXQaX089Tj$Y;$8gzr?N-P=eF&E-!LOw1f{ zo56!yGC$-?@}v1s|B)}vQ?R4pXHq7u5ZyNs0ApZdGF6#aPn~3dup@c&f=HSIl15*q zd!}>}H_e6sm;SO*<Gzg%%X=fbS=s!-zn5V=`GbyXFr`)Etk!~mH}#{eXLV!EHg}jv z<g}6%#&Ju+L18`s35FU&>ohMNJ>p|Bj9g4nTbE9npm<n4IPr?yqW(pT^HUNxw%6&$ zLRG1Gk}AZ#)Zv+nL>eL{8%2yv8>Kill3TGbZ|BMfT>nh=qI@^94PQ<_I&7<~aFbmZ zoP^{3hkbVVn9ZxO1iops=B_k1^u_s6{HUCX8|J1Yian_QQvb@Z7&=P)<K`aBcL=$t z1w}ujh__};s>}{!ma_>Qf@?=u&g$k})sHmVk|4c7Q9BrgwN&Y+7Dz<#tn3v$0ZC>S zD!c~p-rLV92^~pJZhJMJjSX_X7Z5j9S%m86qUI7g1j3v3R*uog2MS>ahZxqP0|g?> zv#g(<K`r;ZDT!S?dk=Rwt2S4VOMR^0B~L=o7t#}HVLj#&IRw^@<Cz^}JF6aP?*K(a z{psFeBrB(nL)cYQomOnGAeQ^y6;(_rxja?8aIaegc_|4YHdZzpJIywCi7JvH9;NV% z8F6nla%p6q*SKDaA!W|;cI2!TJXM=3w>35`2df>#Vjlssg}q$My0PXGIXcIq%p`IP zon4{)ViGw7)|$}CFPZy)B6lyfSSoV(_SvvfS9Qgl9%l?znMBa`6vVEgcBTK6ERTZ2 zW~Iz0anEbXw=ccnOP{z{R%=IkC!ez@0BU_to(l?%KnBAM#>={FI0bYS#<cGB{hy;t z7OCyB1Rw)lUB7GG!#x#^Pe{Cb2)N;|iboj>k0WKi_M#9H^tQK<TIUjyr$Sdr^tzh3 z>sfM$k`sidd4PjWo#FU%dX`wg3K2Dq&BZaDaIyb6<LQ-uym(IuPVOsVDFHGrb!db+ z<JUy-z}OH0SkipeGCx^F&P*o=^T;-pl(8x}DtHe|y#!bkYJ=^;9@Z9yx#MOCYHT!; zt(V_6$qz4v3AuIYIrz#`$_$K+WpuJ=CbV^o=l1?j1@BA<d`U`GGoK@W!OUtOZO5>k z_i72|7AT4s{qT0+%%(kL1Z2fq7#_j2ReK#)kySe`0!9ggemeSfY!!D-=~}r5`R;PI zxmjo*$)01k`o`n+hVEoGj@k)8#RnQY3aYs$&dp8bPC+gAyf>9){-H@gL#!`!yD#yk ztIEhTDu0e8PZ2n{e{2pGFHU6Bxl|2Q`xIOX!&e2fP$}nPr)6*^KwDAizNr7<v`@;> zU1!CK&Ok@Fct4Tn58hB{ew7nRp~xhMg)G7@aV1rBB>TK-h~n+Z7_v>cwlAtdO@j}e zBV0Elc%@$L5|6sH;bzg{RTw?h4qdLSN6N%3#?B=svtTU)3$>rlORJ)lKhSsox)_c! z24WT&>lHlaj4QRdpN!Oe*ep-vdt`2&8Z_6*5+tPd`&{e0Ze?xhDNocs_kxwd5`U0M z+m^<WX8~njDW^?l^IdgppkSk$Gg<C2NOHP^y7`Al?I#o@7L7(*HmGe!yH-q`Q>z`m z{;|Tcj=bEj3;#Ec$w#u-;1{PL%t(QLdGd;KHc_EPm{~@Egz|g943ENFzwBBZIAt<4 zJf?QsDWa0!m=?5dgbE)K{n_IIBatl=g$eR8tVVf=wSe{eh%Bz0z5x%%{~x<bjd_qG zzAk#&OfPRav$*l3JkszHFxXSdyM-_OnU_flW`^$H#Uk$yuup@dG@RozyoB?<tP$1F zxghNnFc_pilT-{U9@+qAgd8~Bpxy_UNzHm7(hPI#zXoG=6>IwW(OBGfeYH9gy0VP_ z%^6caUlpALu_cNKFOeA1sb2o1Avfy5Z7AeSNEcD8dypnI8JF*4sz_SEUy^V1<i6o( zp5X6+Wp;EHnXdqwaQ?ev<drB5(^ftoA)QNUO&J<x4Ff{!bW9F2{bAl3B#Xc12NsY1 zh?aolO@5G$ndgqCAeIV|!X`uzbB;I4Sa@FxR$t!2tGx<PQNcEL(#34!y}O^kMh>Rr z@p{m*-xLNP<i&&R0QgGJgp>K_j)36>I`aKq2Tnd1yg~r9M-GR1Cv6fI>X=*e1k~E| zFEbQel3U$1C(NGDZMb5+7!xV6Boxlq%x1GK%$9k6AXAO-%SBsJ-YaF7BlhHXLk^zY zh(J6!!#C_R7}+31Hvm*XoGZ+CphfqN!RZ!GvVy4rUE~9v3G#1<LwIeB$<pzEtz%!- z@arhhp9qNfEcAh$Sq7jkP#9Zid3TBvY>8hN<x6oTICZ(%z*t4bH~^EpU2X}I32u-> zI2#Er|K)W<r>$OL1?!)HM%dHgKhw#Zdjg@mI~0fYMe#OICD07wED?1JqJm!i|K`!d zWTeXS&UG~DNij^sf5}1e8to_uBm>D%QvfhT8hg8BhkdU=NUDPCf6@l2R=^6qTK*HZ zKO$>257bZz_;MI!1Oq)?b*jnmY(3#sR&1{x)py5>MW<zA)V>&=*LR7-yByIlRj%~r zhx^K0?=B`(WPe^oPvFHSAUOf#7CqT?(*HX<I;tdS7^i}x_|i1OiYBQ%moa0E|KmX_ zgLaL%uJtgCq~q{2@C<ZBJjAZ!|4%Qi0P+}pa23Q(WypXkevb_LbMjsa?=6M7i3hPK z!1r;3Kfeb<>+FbHH2|hvrQBI7SyHF`#TH(G_bxW4K_$n$0K?WBL;rLHk0Z&GMO0ms zhp}6kXkuUtrfCjNW!0){7&??)L-m$dpi(6-i`_VP{)x4K-9o06bP*Bew4`tbMCrt0 z{+5w@z#BIBRAAr8UvcWjtkti5%2KP$V(ixXE3ochZYWb{M{9=(&QdY`+dvk>Sk{mC zy8o29uxt8IL*X7N0~1}3kszV$k)W?xXubI0O{b_2YX)vLo^<2CKx!b0^bN;N5YO2# zDJU2!PTO^FWqG!NrQJ0mW!Q%Y6h=j9(^N^?_S_G#$(iN11H+5G-|lLjI``@8A>R#b z7bLFsz1yg*qUwUQr6N%`6>lT160|biHmQGFScoU$AqFk@un)#3V{!1Cf+E+d559!@ zoT|;)56OUSL?||nf@b!g_}8$CkEv6f?c3)YH3G-~-GmDF&p`O9@3dcfS^#?!+E2I7 zY1?0szMJ#x#Zg&wb@#^Kh1t(xaRNsg5X$n-=Yqt?Z(zaG?$7sp>|$K>#iK&Zubd5@ z#0il6Z_Ck)r7J-CcPqZVRlQceq%y$Eotrq{X~_})M$0jVK0j-}?;b_yAr#ZSc+U~t zylT#MO|0Q(x^2VTiDT)D@}xXYM>%gBLC0PUwyVmVB)XLuHSQJ{g7Jz|yK5q^C(hxd z4Q=f4>tOVD8iqz~KPk~_sHbA^{k%}*0b$*J?=AcLXX~D*LZJS?P}-#xiz7~92@)C- zMqm-#8GQW|o{6b75#}y0)*o>4LV1cZP$L)rH;_D{eIW}>UzH!rEiX5mBy^5;IM(`c z-u*5j_;+o}L$sg1*R^Wx?(Yhos8?UU&af*hIxK1kGp@(SGIe`bovvp}Re0e=o2{j1 z8?XxyHTm|5*GrhsgRB$SQ`;J&FViCp<j$jyb<^9=D52BHn`>Casf!LDQ1rh6HEWq` zT{*xsfEfA?#EU)CN(<#k#YDqjK!}HBMwvUZl+>1H4`<$GIr(mWre`8R$FT<KXMO5K zBaul`#kT1~rxaFRq{0ywBd;mfmR|cMPwF#}GfgqPCnd#*TbdU6^xkl_;4PRY*CDRK znuE_nMaOCQtYHWUCdx@+Z1iVM5m&aT@Yc-|Sgr2`|ILIBykd|59983CD@jeB(}k){ zzy_J~ddDSOZG-f$hfV14h3f*+M;+iEEbxC~m$f!Pn63{fm*4%Ng0KPvQK=24Il1OQ zHz^bhX$cW)lhr3NoQ)T|zA{;+(&sn3F^;cXEvZS1HSNV|`*7p=eC_|*vSh!t6xwpI zYPPC!6h8_d>Bm7XDy0iK1P5uo`3?v3I8mJUm;e4I$NVe29n*IvP-R;%t!M?z%HH${ zZF$n?pU7%0oFm~<z~<LPuqs#g4m;S`+TMBa=G$vhyb9pFoJl;a2&ML-gti`Z4!mNI z<wNkI0w~vBKbxNE#XPqfC_sMown;m4q?<8~`Q#GcY96`-SeMg>x`RW8p%Uj!x2jTu z*mEv5n3n^?d3zHYiiqV(zcoFFodmr6!$wrjmO{l>olNl82P3UpA{k}*jatqMf7<Qr z*Gxi$24!9t(<604v+T3y1y?q#a$8a$zcgpf*1=bg*-ZcBS_v7SGvIedYT-oXOf{Vd z9drQZ*N``IiWGqv%flSRx55Ui*|u|Gj?)vJbQOH6@rg<=ZB>+>CAi83^z|Ap`gc#s z;xNevtNMYDE8=vY3ch@xf11{RT&qohoKLXhpifpmHbG)(!1G*#iEYRlKrKk?rNN*0 z&(~E++>2r*vT2@1@@cq+0y&E<-tb?Q#c^A*kKslEiH-b#Px}9ewgO(Obt>f`>{@tO z->}{ywg=%vht_k!XNF2{f*3tlv}670uFs&Kz!Bs+%9LL!uZy6U{%;(s#Kr_tunF+g z*p=n7Rd*}VQvfTpC3<Bl+W^r$;2|-Y{PA&^>}oesV1!s0zcny{-5>Ai%^&ZIXGMgX zXGJRm$yb#;Aa&yun=|=em1vma`T;{S{V{*{Vnv?mo<*M2PE^2eVHCdAeB=Ld9EV*0 zOkbN8T&<LUD#|EmhQZyLAL-2>?}}|XQ#x4x&4doT=I$4-i57cM|4upnn7=hr>n-=3 zt%MG|WlSQKfB7@(W=G^IrC<Ht@L!vU62~fEl~=&-jH!N9QF3iLQ<n7S`e+;2MJqbi zK_j}3`4_ca%2NO4!Y_^DM)Fl(1G_Rm3Lk|J^y8oDi~!L8ScXZDhy6z1D$y~US6|Z^ z)S2Sv@T&qhpE&3Nz=794(--AO@~gQ@Uz%r;yp>nQ&YBzfRpn2|HE~SyIkX+){`jVJ z4!oP7l^@E7;Y8#*=mEfrUuqxfHu<T9SWlyH29b*0so?{!8B++QUzH!qiSV(YBtO?c z?#z$$=8UVvix>ZPByS}E0RH1Vf6`ZCrp2qqDA}iZf1X*B8{3zS5G|hV0_SClcxaiE zhL8L;6zPJ&;h@U<N$W46N4W*Ew`jgl#4_#u247FH&z%3DBe+Iq(THe$hcFan^F{^U zekf?OB*3r$jvPqP0}c(3YAc<!jryua04A5uz-;ixanz3BEngp>BI9gRB9&c%wD8C< zjq@`j&GS65^-m3kMWfN^h-0{yX|L8OY#~0SR++jxi>_Y)0|<||Ryg8-ePcEF+b<sM z)3(SP*dB3jGa`a^z!$|&%3eMMB#79%dEx<Ay1C*b^w8&O&^TEJA7ZzXIlE38&?-rU zjq@Z1WDL1kP^tN@$R4Gx&>Ax%2yYxnfu4>~w4>C!!RcE7GZe{uHoxPpIUMRWe*T;S zhUUj)C16iR;6+$?0BYgmeUk}XuqO4XAA^SH<|tRI4K^I#Rvn6JGeKl{F9kjOE(nPe z%7(*OcGoec8!`X^jPqd)0iQy0ex)=f{O&_e83H(e3-8EJT9A^JKgm}lUtn#DzP3P; z&>QVUI0UB<Ts)Tft`L^CW=7EBZY`a#)|csRZ@<;CrepOSif0@ShpVqhp4N0;53DI> z@NM{Cxn(O8=5iIZ+_vB88RS795ku(!Hz|Z<_~tz?<J37@RJ7r*hQCFVX}y4o=DP*y zG3>$sadA!iJ@?<4ncduKB&mW_m720y0(S9Z3qZ({;RJ|`S-kKFM{|Lk>v^6AtmPQd zA=6|4nvBhpRtYIZN@drfBN3I5Wf>+^OHVQ7-3yftzh&z|QLBXqB7MT<s~gY3eG4c# z5-cbZjo1r;DZ&A~C2W#Ga>(|a4Kc{B3(|awB#6^R$>Qo2CvwG7i-iS-#buQF6aH5u z$6<7yCwh617l#+G^SA@Kf8K6HcE3oda(DOuRk}9x-SHe^Axhyf;)E2`c5~7*i6*j_ z0Z8^R=VfVx+m!)GSwkyaJkTH-3>t&J*<y+vkOl=A_hvYRWT%t(NmTC0K4aH>&a!@C zkCYp001Dee^pG7m7{&}T=mK6oBN`;5Ho(jQ%BS7Zb4$06bJ|BQ-YIF87`cL{Fh#gi z{?ddl&HamNZ=`<)-gN-qI+<}Ig%o~|s4!RZOXL+BT*q+`+biz`v<BTEcX|d+0esd_ zX<rF0MLHr#HI`?yBCxckPs&NUr;uOnugMUQY`{li?NyJLy*jo*$gIe~qHhoyAw1#F zycWvR)mi;*9zRY@7c+w9_()z-xp=%vk?s&lGR?<F#$7NPfEo=SR%OBPaMq4+N=Btz zfgLs8-=!^Wh}7;4i}_#Vwda*)aY>wq;`;!`$U=HLH4gqk)}?WwSu^MMxQFGz?A2v9 zg~gwk^@tPq&u%W2`3312#e@ocHEg{8pc<1rW<ZnE)kY9<nHQiaQ(7tI()tKk1kNs` zB&F)T1--b6amC{8<KD)(nubumD5`RCoVj)lynz_gxm<2-!K03>fM&8X3ewiJ-eaE0 z7kQ{aip;(7NnJ4w$EG@IcSyuiC@Q|6>;vOpq`UUh(YcIK(Eku{C^c)@XyA0fJHozU zy}I7|Zs($2kGl0|8dqeXw`h|s{PFtj$4Z+ZjYfulN}H(l2)t85GI_-w;L67)-)+Y! ztuAoRBg;YsyUji$i$5l$;}REvQ*bpRDhZ}hSYx8k#AIGdF*vpM^TApn4t5rI#?6EI za80=ZizZGhx<hd8`XdA9?9#DdYv+l+(~__P7m=#&2R!;<`sD}UQb6!4%_hxyrp*#Z z{O9mBh-PWeRiJ$l!YA)cB9Thad+{xW3~yvWVDr_kFPXSpD#a^LU+<>xD$K|gS~yg= z{RsJsN*l;&T3)43yF=B?a!Z@i=*fHWjZm;G0J=<HSkxSY^t^brKuL8vAt&Au5KDxU zLx&%8QQpsq-}_>%-*hRx_owg&R{M@IT9PfHm`BE#)k!YyW9d&olL27o*1{Iy1n)-n zV71TI!R3T-R4*#$qE#KfR6RKyZ9T=KWs1tIRMMfjZgKBPmK`2SW48Vt%@Q8<09gGb zEq3FE<u90-=)f+=e~T;kbOCnD=%X6rvq~`w9%q<ZB
B*dLh1urASjSND7d#ZJ? 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 diff --git a/assets/images/shiva.jpg b/assets/images/shiva.jpg deleted file mode 100644 index 8823d284f1245a8b2facbe818ac1e23b74209481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51553 zcmb@tby!th^8mUDDM4C68l*u=x|Hs2q`OPHrCVCMJ0+DmG}7JD-5rO#2Yvm1-}^n! z{p;R2hqG5qteiD7Yx6ksxD234h=_{-P*4B>1^EDv^MF49^BZ6x@azfT;o;!m;h!TQ zLO##YpCdnqe9=)cP+vg)@USs4vGIsr<Gv=MASI<>q-W&gQ-b>c%HXjbKu3W7`Ah`{ ziWGoGhk`+edh7%UAPt0ufr0?=7a&>KXK?Tch>vps!k_Xxj(;kl=)(IsSz<X6Wf*lk zaF~LZ^@;zI{qr2~uO{Q{r)D0!UEm$!M@2S(V+;xI{9iQKDq{um1j8ZwxLd9H_36{Q zU!ur*;RZO}2FN(w|H}~~a>yacgmcI!p(k^H?sbb!O1M5pHxs@ALQe44;D4h_zR8QL zPBLLmaG;iSAN`bTf;_r;ebUJk+|AKV7Osbb^KX18x@u|@&Vg#4P5ab5`bR*qp2C*W zt3GOD6+N5`Uw|W$=_N@Zlh40ou#hT3_#35=bIK^hrzh4^lgGXk?>bcyMGvQiNLb~F z#9j&4{T~vAA)};C#kl>{4Qic*^H&n;Lu$r~6-iq^-U%>8*!o+98-$DE`2L&7HwhzI zJuZ(^la`Wt)_OR1Un{AaxGN^ye8ZL#OBF$+VFf{isZ-t;|G&vzT{`csZoiQcmr#h? zGKx)0(6T<t+MDO>Q%_(CB<B%e9sPOstAWO!L`&YE45tfc<zLiRZt0O$B|lGlrKu$p z<LlHp7p$f}@yZJHn{f6i7zMA+Od|-C=`d{V<TtEnDYv7C+XV~%tFO;_MfF97`MWJ7 z%p??2_ZxaOJ?nKw&UwSEtNJN9WgH+ww1%`--0-7?RwCJ~{JXLe2|^D}1+vh8^#S9& zxi=#9*yZM2Um-rGZl11T?~;r6p=EMv!Foy1*%)ks+@0phE3Hvf9LkfCnx9;|Ta2x$ zWf!jRFW>rKd_H-4wpopJeO%%!p`JCW8`j^uY9_KVzpZ0ySddNtkh8M-#<L@xlb3f! zrLm^9Sf@Yg1(&q{UF%Pb$ambUFtofJ-g?7`VAl0B%z{8m+XtGpBj+jV0Pxzw%j&g< z4omNJcAA@>v|Kr3rvV)4?*_n(oYm_6PH{ctucWT&?-<*6x&6{YT&niAnLN^}u0Ql_ zYU<$!0Jx=+WtSJ$<x#H!Iwz;Ii;IfCi!gP$i2f!9JSksKxE{(pWuB#1mqb%o4V2Y6 z$@DcXMqFL+I!l_^jCvB~^DGeqP@vu1lC5+_O;y=JaEn(hwz9ON08=EbJ~4Ca6S?PW zr+(F_uC1x3%${3Gpgm*>(^c&q*5=@GYe|=ZJg??Flns2legXtU($RZOI$f-eteku- zDP<K}N~$0A@CB%r>9!rU?Y}@6q$Lc$p1j9SGM)psct@kLc$t?1fXz*FQwXMvLR!Lt z^};Qi=C|tl3)F_>77E|46&S8Y;$1hU45JB`sNox~<QC_?v)aP)&|-fwY?t>5kAQmt z&&gfwdjNRe$je*8Vhv)cdnxe=oUUkK&vp5U>y^dHb!DS|1S3#Cd122IS4}P9P&IEg zGYc}Xu&~)Baz*jRF6QKOap8}5J<9P^taRdD^%~CRq1+nem6lOWT0JYuPcHE{z!84A z<nYZ}lB2~$2>^`Uxw&~|{0B5G)R6n$6{KRIkA)vjpWZ~bK1&a3W{hPX$fKU;E&~}D zK%_V<c*Ve(ow)fWZ9F)irc=2emE1ne)X!RndKCDAwae36GWh#l`^@qS1sGL>Ohzol z^n1<ie$2Ve0MG6t1_x7cf0A?A1ISEYCza(p_sd^<NLxN@^c<@7iBTUoGd!r8uVZs! ztE;=su)pA4CRqh<dNX^RCHf3k-6oDp-q($cpDLMbq`y*CRfu#BUYitl6kzOR89ASS zk5T>lmlt6!!18VU;Bbo=s)WanWk^l#b8#gLwUJCciv-*GEqCls3`u5)N~oLn8tNWe zoZ6aihN<3VM!0^E@D6QESswm!t23A4HLdHwlZw<r&@(<Ul@qjDW0w8WlI(4e#4ms) zfhlJT%v7BxQcgL2Xe9=~Q-~X-8awqls!Hht17`^a+%{ieLpBvs59;Qf*qp2vXRkmX z2^cgPd7@q=fnofnwr%#e9l&!$cK6R34=h>Q&(u&EP9k`%%vm`I`4u9LK6n@e$8VAN z7<m#(v@A(*jn*6M0xwwQW)oOQ5=gU~Lwv|};}g}O-c(b|sHhwL0GYUH(GQQ}t<>*3 z0Vf&3Zul8*4d^qh+HW&<Lr@tyVE8dlx!f8WZdz1_XSa|14PNKGW=KHux5pgVf@omK z7AD(Lo2d#}h$Ayr-s?W_H-v_ird_V%_Nfn9Ryp{WgKV5lym$CDp^uDOP&<|gXRh4% zxT*{Guf0_H8@wu`qBa0mP_UWV?(UwM1Kj}YN%94i!1gM0D^%)6lCgcN4>C?Mh+s0l zDqoW&vWbmeUdXDY$<h!it{|l%fi~SJxtiR)I^ek4#KghD!RB1n6!t#IaCk#@KxC;g zr_226-UP2ZjbWRi@Pv!_`NQ*#ns=Xa%F1No9F@DjGNBCtxELn146)RDRMR+XT=A}h zAx9FpGj+`_mO2q?2Bfzpu&oqn39L4QNs|%-`;?xET3!#A(?$2FK4{hBHzwWu$Ui^v z4!CNS>jbx6@>c^WOExFozGv^=o#d4XV@)FnqPGKpzZGD>w%Yt%-N>!7g0nb^-+Hra zV92)2Fblw}qla{{wzNU$8=g(wd|AUhmloc`{Urk_G#@u;zw|D4^)8`s_trQl(C6^x zDDOV~Jy-hT64~{<sH~)>OtM)%S~*iBdMi{YtHrjAx&gTxxFz|LE|qrB(SQmJmN*P( z1>n?YQ=>)9$$8DxE9grwB3wY`y$70~j<(O)9s#X;qNr617=FeJ?>9L^rr;wMn8qCs z0*XhVZ2QVhyMOn+8<AduH-ha2Yb`75ZhkW4$m9@3=wL%OPD9~hb9SoeWZ^2VfSime zI~5$QQE-}?niv5J-vJm}HjV49Vx#1wZtKBtJ*#P1<H3~6`l~B`-Fr9<zULoNQ2n<1 zWL`!kti*mkQe4<Q-|go6aR@VYqt|;Ew)|;lVhW<nY5i#<89VKiIa@kO=;={7G@V7= zu_Qj}4&ipL`H;26&(xbYd~^EM3cQqP(pT$NL+)pWXoACP{e`r$LC99#J0QxMtyr#s z;eT~Dhp}aL#niFk$_q1cV_jg7)OXG-dB9i1U^9<TgnpV4zB5`;Qc@;U>kwG0vVpHE zY+rXLub7e(u2Wsz7+Ms_W)Hx!a^`L|mk62Ejyx%G*s;Nw)Ps8cg|f84gGa#T)~^fv z2;?3Jw%aj#P@X*k(__=CZ0<^SO^*QC#6_dq$Ka)3JW;Xtc{_Z*qlAim_ms;SspqW4 zQ)8nAvadu{Qc6{m3qQNdO;@ODhsIPL=GHpymKb<BP8<0kan5ZT#T(tD#5>OFLJZ?1 za)|vjZ{0P|t?54h2#DP0pDuFmXd$}{GlJ{aRmU2q*M^pV?Qd^8S**4$?ecj0x;+Bh zJs(}X*vBfaUu}A#a5<j8W36?(TC0#wRF$5XMpiaDE=c?cds%NeJwB~ty}?y?un=D2 zzu%o7L5yg1{;jNnzR@RwO$~tI%%8W6+j5-hw{doGci&#BjYJ)8iI{cGi1wl%_Y8|4 zUtBW}5_FG{b7H%*@guUi-wO6PA`(tn=1+3H;i_@CaBaA$-`qX(YIbUGIL|}rbUoK) zYrsC+3q9y(HET4Mn~UN~aVp(X1)v{NSxwW2*5hZo%k$=|0XP<!wC3j<ob%>*X}tIM zkATB%s=b%d(LE6v7_^>7RDTx~b;(eEx729}<FIr42*4gEp-vH%v=~iY{orT!vY8ki zo7yxpvoJT{u3K#unb!!-sc@{FRAaI3dS}2E6KU1yY%vmOVk8H=JlxXwp+(<!!ERk3 zk#wkOf%7Fi)X~Xwy58AMF)cQ$aeUY2=mvF1HmNu3bXf2DXw9wm-aY5o8ZyrObvo@} z*}>fxTa#X~&PjK(rz10S_eNLz`Uc*o8Jjn??>?P_?-n%n!t2XM#v>m(S<fxvf8+oX z{j96>`cf;7*oX!Iw2BOec)d!?;bwlSCffFFS;a`dO4+uks`l<0@1p;f;a;TE4T0xD zdE)t=cVC3f&qsh*vUwcr;VJ7rdLNZL2KMfEZ5iHuSi?Q$XIKFr8c$6P+11`wOs46` z-fe){@>4nQB6!_si|LcjiUa1A#*qO;A=v6vV=;&sL78eS-t%gyLY&TKAxBnV#<VA| zK!nVgi9Rw=VYbY8>PqFHW%{6^QD^<)&?Du9-~ES<@2;fX#F3}>C?VboQHgO>-yP+P z<O@IEjBVDh2bXtIXQDwlc_!S6MKaBf9o(<yer~$vLUz%&@P5Wt01(HO<b=Ux`C9!o zQ5BuSW~N+4C#9eoR9_96y63(z`7sF=?QaUAZF3#64pL6*aId|PwL7!v`^cZ?RWoz_ z2*j^`(5`en+9n#+4s+<eM%}th2#j}|d!2lts$>wl>gz!Z*|IEOeE<MAHIOVsf*P`p z2kS&sG`UM>wyi9W&iSHl9|*Ls;wIJ|yi>KTq8r$_oje$(9^&pYKo|6HIZ8gd9*y!> zR_}b<%t!>ibvXY-Qj+zg<wddA&>_5^0M3N;dtR!(B7pc3V!oGEEkrb@wFC(k+(TbN zG=%8przN;M^dkly6TkDt+Zu2W-qBJK2<vWZ=0-LAI9bQ6X4&K>q<;4uhqyQA9bZCV zdU<*CJLQjL$b$cIyfBj)+frFLkqwbII5!p59jEpW_RraG__O$R@%S=)hrnCQQJ9An z-AkB**MzJs9iYC29D^P^mVM7@%`Cy7b$(f|<qIA!`BR;CE(kO<)XGaMw=;$RM*v2G z9vVhmba*aoOf{#B(~|Mf)X?E3#J9WQ+z#^;#XE-AIjdk_PzP;tHlw6^@Ml~dagN_5 z-lU9*X6WS1=R~Y|%@^GkENv&<JwJ^=p{KX9GB?ZrE`alY-Uaekph`XvGeJOVHnrL) zalv|OYHIWH5m<TzOm#DIA9yEkD9;Gemx@B~9s#6>p3X<$gEJpJk=-WOVo-ig!0JQT zxz12V75_)n2rt}`(Xol?iTq^qV#aVi|34D}`GvOkml_gbNiFT?tm?O^H?T0VadvjU z>Y3>AdC-#G^V&O872V;dzDd_RJ(6xbY9J&_+~D?V(B?KMI2#tdVL4O9+}9aHe&?M= z$So+TsHv&aU|J4wF8uyZHUJ>z_;O~24~a`~LgxC`W@c`7esS?)X_W69SoMTrdZc+8 zZ;i-s^)6O2af|n8j4yh}OL>!zwt9N$f=G7xI%<50_AH%dc&~fN8~ed?baWgt4%x*t z<!F&)u(to{2=0I&iy&@-ao>|=xK}YdJNIj0@fQAwnm_FkK)m1!BT@#-76@wJ&2QbC z<bhRPo${RsRd>@_f-=(fAghjV5<GoUo*tQA-cnbqEU#tT$)x#zeE^XA(Q(rq==$ud z<`1h4%<l)A2aiT{YEJHgMsDbf?(sJGe!jbY=pVbQaL&?o%`jSvV&CM~^sGLv;FpzE z)X~%^HY@%vK=mQm=RYk5V5^gU+p&9ZXJ=>T=YRdWN4bjH)Nz;z^>V&g=ub}8@Ools z!OPjB*$0lYrUp-!ZaaKBzhJ$%sNKsi&Os1GgP2bL2LmzbMi3`-YTjw6yL)kJbNx>A z$Bwg$%LKT-?!vxNt6;yGq3`k=ZSBeFAjstie0RObUNAK|KAoef-2m~EyP5pe{yTJm z(KpZsakO-dQt;UKEe{UtwC}GLDu!-AY%@1`dCV8uiJPI;JfNVx+o7Jls9t<)lb{{e z3p2><Kpf0=rY_6>cDUgT2a^&^xak_^twH+tW$FCI=Q#JydtUIz87U^y?qn&lP3KGR zRxX^d?<#aE&MT(8V$Y)bSk7jQLs>8O@{{+TVkK0||JPdpT3tpxu7H-lZk}PL;kLFV zg7;{i34F9clw$0yJR=$_!ZHrABqAIi>ThvRhX*UTH%??)njOcbEW*ix+x~kd08C11 zW5p^bEu%zBEfbsRmc$!#otUOqgH;!V%OeFGOFv}$ik*0uc4P}rA0c*BMViIlsIntO z=iv09{mYpLSSTzZL6QBcJxa%UuPe_RqP<1b(~|a+*_(tT&FSJs)z0zNyJYS0#vOh= zlar-Xmq&ml52>UWy9X__iOlD}x(6hve}e=_s+{KOqdpvcBbs>#I*kgl^LPYsxB2|| z3PkKy&n~=F@fx*L9B*uPbkZMqwmi;~AQ2NZNRZ-R6A57SDM}~|#-`O-yFZ*&+=_NQ z$n+2FjP^v0yLqI)BphA7TkMe`tjN63sqnG@hh(IKx%MEDn>DnM|85X~7?Z3pP{27m ze-oFXcu#b?^u=W>dg<)YTXTDns6RvAqtU|H^To8xBT(vTG2%tu?|a58Cc+f{Kj9;Q zLPp$JA#USbN7u&7Z+tlLgzxr{D1c|v@gZy#Y|?Ue7v6KBS_Kw`-{Yl&Sc~Cbz^Jb| z!u7)umjBfpskqs=YWj?-!${Cvsq*$YKax7#x$8HsUkN1p{Fxx)dIqLbwBrokPCG2! ze_|bf=@Zn`9g-xAE+qx0?sXULhEG2ZQ`m~)`16}w4%u{WqcWXZ8sLPB{YC%tlzg+E zU~-P?>2o97<e_-B9>c8L%@moq|8`ObYXdH$_q$7{!T$#GV5?-LwrqA6eONB(Z3bGz zQ<DZnm~f6f6OTZ&r@m3iE~zBpOlbd>BQ=maY_Zp<S1Vg{{VHX`ggAt+V4F9JHy4%c z^d<)%z4hPdxI<EXvS#P|euoRggF2KW<E>29pgoY3=c{FHA^hRUZ4uJ{jyF9Kn{cww zdS&fHP2ZFAzdDgkI5jJyt>X*0WGIu|Ai~^#rbBin|DUt&uQV2twBedh9qS9j(=DZ^ zgqpD^kAUz&UGh>Ai0j^OBxu;no+<n<^53T<+30;>+o=w{$*+e;;4mAWb|oY2yUQ(n z4x#hf<p1^@V&No?JcROzZVb42=eZLOfLnB0J<gB~_PxTVt~2QWXP_XqgoDXUGwvx7 zUAI&?GLg}_NpF+sU(rlY{>N{45%r5LgXA<5fMD3XI`#Rd7$9N%n}RRD*;^-+``Hfz z$2Yvgse_jJw+6|G`fn2Ol>O!5*Xsj#W{lj)2L3IE4rBh0q~~5MXEqc7)MXUy^7|(Q z7-Sy+U^SwB^OSi4IF{L^(`A6@J^1=}UVzOI;;NL;R{i{)h5V3F*aA?gzjHWUc2x?H z)MQ*9-6mtI&+kG2APK4ZCxsIs-=O|e<UN3*R2r?x{Pmw=0~(7e^}m@w8spyeP9{zO z2!K6HoeZP<+gbtKP>0`A;g|s+oD8;rlPNSd&IhMA@Y|ac4TY-rf4D(2g<GaFOFd=u zS%+K!J;dtJEdM;7E$p^WRZuvqolJ7j{eSycE~nJbl1~040y<UC@DxgeB~DL`F76xB z23?=72%3ybCJ>+ShcVDi5@*4}DN78X8+`%vnaV=?>;)hZpw}C5cHz(IB1zCK^S+2Q zOc^UJOX48PjQpXZHO3h<wo1qSiLep<k;%vp?nAIDIxRWP+H;C<3t5bC0Rwc*wBXzb zyD&~tfbRPrA~HG?^kP!`4?MHDI9)D-F`X9Sc}e20r^L|nNyUxP)u{!V$kA|yjDo{A z)&0u`XhOmuyDWZyh4?o)c8CGC?hs`vW%8M^-A8c~1U*_hk%kR!W?=*&K$c1uVDVvz zGcwFV2ww(ps%*P{3<=^uMgS_DOcxz%RW10Xh+=?!ER#<)P8i!7OMu;AOfq^WBb+UA zCB)E9uIg>a!4Lv42A)kJE924mTSDdp5(!n03$Pu~2Uz07jX98w<yk1?+Eo|@o*D#| z04?+$fT3dv(TTwp=@np8hX{*M>o!W-NZx~7Z6FUZ0T@*{AxUHue<H;IJmeY%A9By~ z`x@qVmwx|1LBssMhWUL91C0hL>w78>1^`IIegiZy3A&@WnA$&C3Q~js{huVvH6aj* zPXHyaR;KF{H<&*r<@37$HnRx3%mN)dn8J!JMPr=$4<7VbsZyvyZ5ge^R9ruMZI#Al zZ5jC=0*X#ybP1KXo-o;n!Le>j8^=c6D#PXjcL~V0fWWhS(oqdn0_v!jiAn1Kvm2^# zBAevmR2*cCo=v_7U}x3726sh%wX^4eEUKkT?xa)g%O84F0PvQS0;9AQQ{P|M&Y;6D zs4ap=+-TpSW~Aj(M;Vktf8;7vMpXzTi2(>oQhhWkOluu}{6S+P`IPy4v%{w|_SUl5 zH==QM?u%FSW(dL0asdDVgBBrlwW~tMtm3r%LrK)q=GTJA(Rp`<98NC_J`2O<JTqug zAs=OC>`FjbqMOHs(b+v*=k4iM)`3cCgSJA3=w-)G-I;#(ITgsLC@8YlsHgy>d1g_B z$b{1*M4ZR>Ew`);p$*#A<Kg^#+m;)>F;;94-%m+O3U<I>+6uc=k&xbt;31w;vcq_J zGzCkuX!}x{A;#V-`dd2K%BVGTFgPTH27od$hAlytQmegQl&!u9ACv?W>9wy29l4c@ zhF^L<@c*pgdgyU5q0m(Sq_Q0>{xr%6!97uMsMyjUK|1p%84}k=I`vb_PT#<hP6UgI z{gqcW%_bHW<VR*rLK08t04W(E4-SuP`o5;(_8cTac3t2t{A*3oBB71}Wp>@{_Hc1Z zQhVx;0)iFN?}^e0S-s%WE-5-6=G{9v;lTHV90m@xr(Q-yXA9b(?+dfNma)3OS!1gb zFzKG%ArpW+_dT}KZXK^ZQfDqb={&~!I0>IOmYwsKPWPK7{l<kZp2lW0_h>AMN;zss zA<`af+-fm9YL<S-!=BJ})>1)PaOA|ILq1OY8(T=&4l>D|uIc$bcssoO4SQ!lxVi3m zhobtL5{GUcyx~XP-Eo<<d;ct1Qmi~Cy%BH%VaE4ke%V`<sl`M}=Wj)MXBA%@zkk%; z8mWfN&uQgv&d=nf96S7mT;773CeCz<z}JmULx}`GPBL(Jn|hLNj4wSBoBMxb0z$MB z25n)zdKapjUJ+A9TSsH{5Wk$6bCwHizeK*F`x^_ou$)Wr1uy<1z<Z;*^y9?Z>8^XL zzlHo@{>SO!)wh3;NU+MN{RF)69^&u43qD`7G0kV4EVY61n)8Pij@%_$f3t#u>^fFf zo}kUB8UD;m*9Uh2PwPXQhzHU0N5HywwE5u4<A(qQuYw)5Yv;11e##ll^CHoizn`Zf z>Y9Jo#Q67adqP5r)~54dkH5SpGB`gHulI{TV@PvDjl9;GaNIYJX?;S0Abq_q<%imI zLmjmdt(Rqz4ZrqsUg92#-2Jnm0YHf3`eR1mL)<T)x?zaRY;mYK(+@d-egg$5(@9p; z#0@`hzR9^q1$Nxd!OTBZP_I*~Ei|XkPsas&);l78O#D+0z_Sa_rV&^=%`Ogh^`zAN zEryBktB-?!(Ol~Dw}iU$z)%VvHK*=x0WdlE1upRVKiU6(5=8%R$`*3t4FiktTiL>( z{Ub|*gbh$eO!oPcg=}3z0HJvFpGw$lV*z7meP~+Kf9es1X4C+5SY^gP2(a0fYDx6u z`V=H+Dir^4FrSm8r`6C-Z^2ffDWy?n{Zovn&RjDG=Iu8bx|he<hbt&_q1Gr?`ok4k zkybiAi7@H=Px$`fPe`s^`h{i1f5;@dDlGQXG!K%#kdndwJUK5@7B>D<gK0RhG;X<A zKzYP`+-mf2E}FowzNz*Ia0v-i|LGgFv5MwA(R5Y5=ysYUj9T9z-vh_Y*!T34oh@Z~ z^*^GY=UcfsfU2AK&2D+Y!|}$qp!wsTcWd#3hb^CigA0F)f*z}xpH`gGzVC5j{O&%x za%HKq)->@6IVetuH1jtGg|YD^i1C!N;?saN^_iRE+>$8OSP)3#x~Z^K=r;zSVLaVp zv9fNf*N`CUa1oWUI5GWW^M#K0r(p+%*HguR_#h^wXy0so0AU;(^DV{?T+vsJhHl|8 zD6P%CaBf)tL2zHB799MWAGERYV!}MwX|&dMIHT4!YJ%%9uiV-#5%giuQ!Ubak}r~= z{+=UrjP#!_JfY83Hzjk4G$!8l-qgpOtK`(Uo2S5;40%1EPOu#?ypj-7{?k;c!Tc-m z6;B24<*W<bNgs&Q(mSWond5G&_m*L=bkgx|$U(MSXDAvS;Ws{_)SS)Em#z&j0)F`= z_KN=NNY&8$aWJLy?k&6B5+O)CHm+N>uU6Pf?l=0^2IGhNc~*YUjQ*bWyMxmekgU_a z=85HoTmIF~PWAzNt70Eb=v?L#G8B`U#$v+2y5n$SnFUV8fO=H5<pKUuvdhXX<@;aP z<?|QIe6ln&f7S{Vd4kULG`A(+V7)2P*E=srtRHWB^?d(6k-#r1@i`$AT5jtTQvmao z)cn|zw(RuY#h@3-@IA+ZqQQXT^Bdai<((6~oei~OlHYiMl!l7VnAgB?MaDds9j(`* zk*ICs!t3kc;6(+E!Z)Pf1}Ok&)YG#!?GFSJ`R=ivPhH}cJAbpuK&`7d8!OJP{=*3K zX|XPup8cwo9d_X{8IAnua%)8(S-!_lfrp9o7wg#$o79jb=f!@5$&2e+>u+_}wjYNi zOV4c*5l<}ovN8XR9~5MNnY7&fT4B}pE?#$k5j)6su;%j9q}F^_E;z*JkH9z$>FRN_ zMOQBt)v<Tso9vXMb)f1zu!GrTi(B^O9~@|Tw#&KnX7{7bUwQs{4)woo;g^2eArsR4 zBM3mOeKp&XFIxQI-s8J=gQ_`+J^5hv{tqz_=YGJha|U-?eUEU~YOgcqTCLsv+jfK0 zLs8$>u>{+tZuVT=HC+A}<rng#(|-03A%JMYJgA5=%xdGeJL~qs!SV`R>*n)MCA5=w zg%Wr_#Lwblvc>i<1>vns*)oh(yTSXvCAg>=TTn?If3yETJ)hncqCx|pV4<Jj>4l*u z#!ogXI`9mQ7!HH+y{;`hrW_Xb%YR-Qf`W#+(`ZKWlDKF3klQU~v*Ve3FM=`gsdi7P zhHFrD7dESKg_qi@Y4TIWnB$-_NkURF1nd$G;wJ6Xb#h8*X^NAqP^OesRG=gU50sTv zS#Q{iOZ@W!pU?`Ci%_T=R;x<RwUm{O<OJ!+v6c6<TUu(BcNNy14X~7rj8r#k&x=b! ziv_Jj5uQkjGieI5ehzh06_?YVy~+B%bXH6o?lGyXuB;T8tcwIexVX3|hAu9S3nJsh z&o2qB=${vqntm?0e-|I`13XiduA44%n^abIyMe%@+s&jrlC|I)G+`svjUq`DN7s7H zlSw1s8EjUdI%08!&J)P)JY?)VfOIs9sV_*2HW!4^l|QO(yl4DL0Ec$&fK#o5B8L@6 z61bKJ^$v4yH$f3i7<pQMG`!H5Q(U%497!r6)ION>JK1RhM)ZWkuBJUpgfnE+1*I9$ zFh7t`S)q*$56Kml7zb0^6&O&%q6wq7-DM&iT*<29e$<~XgDetqdQm|VVpyL6hcY5% z%W__<q8HtcpZ)yNMB(qdx)h&bKX9YuI?LK9jOB22A!h=5xo-eKLVs5w)Qi`XElJ?b zo=)TkiDY}0=(t#a!WZZdlQ#+2xSRZ4VtPa<GrTJE-|pW-<tJML7{nGiZRLg{H&T^x z$90<)V#EP?+x@1WIrtA@T<WIL?fSgi^=hJG_H8-nzk*H?${?nI`KJixJI8uuwL6Wc z`GG(_8SJF8NLcL%^&2#Wy|<a4Ie3Ut$<fDgfA)(mTs(kw9zM5;N;Xk_bT)`y^z)wF zyLfF?_h8rB=I7fAK;?~2qcX2~5=AT&G%^uoqGzAfkJDEnkX+)M`n7emfvJ(%T4hly zbMJGr&|`^i?kz^8aMG+##NGHI_SXAw(yyR13K|1)kTB!A5!na}<h)D<D<t6Ez(o7O zL5AJ5run1Ulz9nJ#F)t!skzLKQ?XcZ6dp|xRTN(So<eRRnqX-ot`)k!N3hxV6$0(Z zx|WJULlJaM;}(nR^p@H#Rl$IYy_HUmrHW1%<fv>8oF}ekj=D~oHcX?}yDU60#vP^n zq(L?M>_TiE1o)c6R*u)1AD+F1j1o-Hno(T+jBQ;ax_p@EmIOME2=a}xbK{MZ^3j2Z zy6go<drEm0wO-+}Cy5_`!w4H3tzpemzAF`c7oNc^Wqp!;-E^p7mEgv67HL=i`2#!x z$pqgL{Br)R6%on?bpaW5@^#D{8A&ntb94FO;o(gTqUtwQi}fri`p-+5X6P}kvJ*Ir zP=0X8Qyr^3<?CW$t%F%nWKF%==>2qT)8ZId<ticaGWZ;}L34IZJoqTy!;b*_T{|;b z9ufH>)?1cu!%(DLNf#Fg=3JT;IR^)xHuH0R%^{88d;U_g-4}4kIE?x(qn+EG{v}Oc z<C(SFa_L#dE2X-4iuz{CH5AvF&4RZ@#W5PKvQjy0SGo)XRbo4&@*0Y7B1tyU3F@da ztM5sQZwzNvPY(}|Vr;f`YVVo40^Tflt}4FdSJ5`>gDkI^`r2QNcVD%V%>pTUj~Dvn zmDNdg+G>L{OF3*;s|1Cq%n)|%doS^|Zr%R_x9K)}0mqCf1U9ijzJqtKoCp0*UfAUM z`C+zpZbfw+22?^0)3>J|t-8}<(Zx4;3`q@B;XChQ18_0C2x<(1Uf^@siPOQ_N-q>H zY}MD^I<~w$Jv}^{pPzdOs;@$YL4|>*^zB_Yia{Mg+Pu-4Wn*ryfD8r`2cvNVdn>Y; z$8;)~pROsOsiSn=)b*__<ECl7OatU%7}IpNLxmPgyu*JkBGyTErg63XbNT5h7-VCk zZ&~=Ia+wDipHLJwJ+YNN(HmtE=D-PiA0^h=1>1m5x6KdJ56;}cgGNOpDSlJ)WQxZ} zB~Z_>i1!n>_e~20j#&mvXp;&pD$<+TTiB(pgM)*kLo6k1!$s_8?t~%$wg=3?&tZ$} zx4lFR^|kTOw3gUVKlu5EwE6K6zAIGz6_gzI_T6C1oWf%89sz0Zs^G4wh;HRnxy!YI zkN}G(R%~dOUPsUiqVk+WtXCdOlytT-FfPgmUcYqM_nG+BjFw(G2O+}yCi=l^w)t#? z<8a83!6Bb;fGJ30k7XklM|X_giuPnu^K{0Ym2>tpC56K<^^WhmcLjWO>oZcbUFiry zRXko;lI+rts;?3wK5_P6L~apL=N*QDhSOH3=9eOTdwO4KbmH+$jZGFN4Ce(hPO1!L zgk@I8Nt#Jh{sa{6BOowiSAge+O8$|gPIt}DlDj*@V2X|~CeP;NuYlOroda`q^|cwS z<&M_&k{ikl8{NumTZUVxoA*m|kQq#s5w!L|h?OgKEJAOzyxi`xBPKD8TURF89v0pB ziYRG!|1sXjHnwE$81wZj@mNip0a9AXa<N@ulV0gaoPb!wwyCw}G8#&#&xFPKKd2v# z*p{|nRC@Q~a6mST9Y^X&4#nP@gxQ<|x!}%5<MmNTG-Z$|N<+vCA(CzScC)})Nf}8> zJpAFA4=H6cH4~<_%8DjE;ho;R0>`IzYA$c^Ib84;34K<UH)7m!Um((ebQRn9+H^1? z&Oz28o#}7e9sxAnW!<)rwvb_5d}*Kl(e;zJ@Py*cYeJNI`|~S3q~y7x_8Rg1Fd?@u z-lYU1?Xc@%U|MZu=zmiy#}4fxGFla*M1}F|-JDQp?Al1rfsXZ$r~Q&ysbuwrFhG0x zxRh+|Lq`xIEaCbs%z3l#E~71ySm$!*R`{o+XEY%!G#^pA$AltTBW&J?#zws;`>9l0 zQ9{Os_agn(2CD>%N&9pjkLx95%&L@>L)$Gm?^DC&w_R#7Z0wa6IFLfvTg710;h>eU zkV512J{ZR9bjQSG%OK-$wn&t{@x;hh5OuGKi(9qh%v9fbOF9bYC7aRo>jZ<(hS2EV znxT8sl#ha}<HRa5(yOQ5$5k;bh3iFq!Rd4V66_%CF!5m{LVB9zn958$b+69lzAAS= zlT77>Q?btY!n6ICUh*LwLB8pWt%Y+k7%n)m2ZQG=N}kQ}?RIaRnq<f@Lps-A<#q0m zz6&0y^V0jl6zZUf^fCYRjr6;OU%kn_>5OZhdV6};9aii2>C-wBki+O@iaU(vXz(M@ z8`h|TuMiq1E0<dsPxVEi<Wim|0Q-)3;m)V<p0UDO6p>~HZZasP<~SRRQ(dC6WL7k@ zb9q-fT!s?eCriC>Mm%J6%A-n@PJ}|ldy6e0J%o*}<&8+v>R7fRFET&Tmfm-TR3|0* z3bYQM%F8H|0hbb;6e)7a%dXYI^qMc(vWR@0OS7O_PrBpSL*+@h2@!JbE(z+kFgAB& z8TZ>~Ixui#7@l9`Jh+5h709r%`YIStu8*==toTW$fsKM$H@Kd(%Oi1+#5JW}oyJs? zjweMKLTMEGR>J-dq%I7r0Uh`kgf<HjJKlae^{<?Je(<(kQbIN2>K4Eui+_0FON`#& z=^humd&T2BOyb(npxuSe{q9t`Vt(t3D^`(sZ0=&m*R!+Bw_LJF2Na@VkV`!DRk1I! zanc;wrSi4ZLMzL6PTsGGknAYBDbYNfbw!xSyMI}UtJKK^nUtCx`PO3;@u`!FM!BrD zpjJ)oUWUwnzY@Mkq`jW*Vb1A}ri@xQ+ohqQ;p>y{2s)LYv1de6P*4ovW3O6CJlS-4 z5Ex@VlR0ZNc?1fhHsvqLNhHiJc|=`25_{R{S)nOt-?%=1ux6uY8Tg?=peRjFS9w?N z+(?d%A%oA8(JN{PIbm^9#h+2OvNhH0D&2XUisRi&GO%que?=)z))81s_^~J1tr=T0 zVczXi1{a>vb&U<SKKBQY{`hp>3RAZ6Q<~~QrvfY`$WiRV;Z65jRftj3a~IB@2Gs1G zJOa^9qvV#g`#b^Zgcc8-+@Zr1V=n0@3z9UR!g7v=s~hAqgB2kP)!j7@lHZR}!iG=b z6AoWK9qbUb>IZ&O2R;QD3Lcow%1SZgw;?wN{)I=C9V;HxZ};%^d9n$Q7ZfheJi^5D zM~XxgSR({h2I47syk*z9Qy-`@l$AH<t3zpMC|?lDZa|E-Ha|G%m>8DM`g@)d-RNXo z%>@w=XY!WWF7iu*CT21wM~BMw`r7DYl%X|cBm@85+8CV~<YU}leX-x?3S-0}hX_6o zQGXB&95O7Lf+L<9i|d0*T6leOL{Q95au@qs^pj`iiIveCZnIQe`?%cX+?8|n>)S9r zjt`8l=PBNq?u$jUHVF=Zd|W{>RE06wwkvm4w=jNCuvlLdKAiBAi?4x6y)5R}6e|~Z zZIHZ+sO{LvSZA26$zFbz{LsR-C0&xi9;7+EHaoldAZI5OBmOi@;NZ5O#GjEQ#8iV^ zt=;<*#YBN-c3H~esZEPY!(TNe<?;7*9cg~9chcPb9z_=NZ(?LHyjk%-BS476_{cW- z?7l(6coJy7$XecduFaXekIRnj<L95~q~O@Uy~-k5=Qv3Pkpz+TV2TR(`Fuu@Q@T$V zvSGb>AZkmlKPK8=8JO1X{az0B*661jJlDM`Cuh^un;7vo4=xZH2*fS<cxxSG;J0B! zZ4qV9w|*69`4P&Hc<e9z#DDKs5%4V{7O#5(BH+!jH+u^dTpKJc>%qz(mgT9|^J|Vt zP=9GnvmKJBS$E2cgyS#Y=r!|N*G=?m*BT7*H!<GaEl{v%5<U|4wAks=-@M@w6=jYE zqMwXG&{<CY=mW8Fx#w15_nPiZyZD<_{-h{>dj$3`cx#<&CoMDlerX1G6%6z(AMGqw z;R&fLdq;zw3sc3&!k<6$i`HE0FxZOTXAEI-jl2|zfOt%vT6&$vgAYIu9xLWCL8mn( z+osMd@G%c1S#2BF*V%P$LZY|dx_{hB%*Ed?{nGhZ>N#eIAYgE|I*)utbth>x#Bh!> zuU=sj;bD;ep%NxUbhZ;cnyA+vbm4sgy7)fJA8ct-qx~rb`Skl;uQ|j^(0PT6C`(A( z9#21eQ%>>9QO^YHE5qibN7u*1Z`7A&EW`pUb;}m4Rk>B1Gi=-Uh-D^U$CT?=y|Q_5 z<_-*b2j;7YL98Elrz<^-mQH>xgj3dhTNV!KegwSxV(E#}mYhzxJxQblt~DIx?)ptp z7COJkGUYBT)kj(B82!B4-@2HuzIj2&wxy-?pyobsm3ZLn{PcBl=<$e3vQKp=?;Rd7 zQ$qBt#k@XE+tkrKaD8Fj;zjR3e&M-e^WbmxlbPGX#PSmF9e!hD)6=(xy&z`1QT$#! zgXR34=!|>G+al?0iZ)GEkA;nmIfaCCLdxdub*Gs=4Upj8rr&%|l^4ijH4jPm4$+9t zqE^G^_27}KY|GKMe~BhTU3H&=gTdOF2eXh3<i(wg2OBVG3z=B(B$)7Z+*UML3jU_d zVZ$rbXgh}M&_Q^;A#Dl%jVb<dmkZ;ul8Yc8T?anT<=IfR;=Bp>xgnydj`T2sO2shi zqL`>_Y@N<eJd}*r>5YgMI@=3MhbiU$0t=#Nm!N3HyU*TV@E?S{!5BITnB(%JTSj8{ z`0*C`4h?&rHg!4qW6nDWRXENO(_<43b!j(}%G^&$J7&d5uh<EhK}cFZp3h`Q=q*<B z^w{|3s`HL1^A*w!Rob=M{cHP&jR$P!Yvp@)NI)El-#4T8=y)Df>wPq>+5ZT<KH30< z9&Hm&pP*hb)Sl_=tMj8AGe2Ms9($uzoK$Qt+`)u_@|-=REI_UBlGiqOwAV+qOFhmP zJvY-6myN5pv+K@HL`-|m&SS^-?v2Zy?wd#V+#ny1Y3B=u&BmL_5ziEe+~F3~A$P*s zxueYf^<!DEpWhXHkGJ{J-cqkO$|dOh?ZeEjdpME(;Whu7PMi0EHzZsm2MO0e!@$79 zAtJ)T0dO$C!!-abItB?7Bw|DQL0%7&SwO+g7mJMXeRS5hwoy3jH!O0B`nLAug1Qc$ zSKb-KRJ9)qDP@nXp7`Zd{u9=L;fH#7rGyTa$$@P}`&zI;um8REH8#2+SVS2s)a)4o zHGdqr9DFnqnvmkD+o%tGEUYl<`hk?3t41(2f2`qVL3}9;><2u43PdKcg0C<@n-uz; zy>b#~Tm}bC7@sLJ%rhq0H472oHIx8d23w6T)aG&*e}uVyvNF0MIEgXmrAPEHJx|5$ zAg+SZ7ml*o*pqxwl=3fSPts(+lxhSB_!H6Ti2y$D5=t@jG{p$NTk4Bn2nuEsqxeZz zhYG!Oj=cW$-Hw;Y`(zT*CUitbWGt|Nlp+p{u*5s)N;lC4JQ2jBGuRR|<TuM^&qYWN zZlL7F$gbPJ$<koM3IzV-atv*i39BgXH>Fwn?$kpJWjj~C503!IA)&Hbxl=iJgusqv z>Wd8hy71ABS{6h?%Yxqz{hE2&j-f|^^r=|i?|lsLDiszlp2>Nc@LJNW$_FF5@;zzb z$+I%U#SD|=qVWzh|GE_F?}7}<VkZ_CIF148cJKHW2bTAJbn~h2powWP5yLn<BNVX+ zjZ8nFImEsc@gI`2&5HZQ+0Qf4VXq9h3>I@-nZ{X=rPNqIEE*TcuHa<&!-l?*GZ8GL z(h!Jo5|}BTFCN`{&DxIS?F(H^^?^ulq6<DL;5}!BPa3>^0D*m>uGJi9{3I}MPEwkf z1hExCa;Iej8JWHot5Ex$S-G#%Xk+z&WPM8PK`7Gmzylck_?InSZH>3BZsTJihz{7S z-#&`s5PuOyV2{Y$h9>Pj)7Slq{s}9CkFijR28%@SCk!H^BGxG!mY$qw@*E=u&ry5n zfK(Lbi0Goz15PF+EYfO?J9cAgH{&cYrxow~+bY`0bczc4qIa4(Ua0<I3XwHGgSxcb zrk=?U4oeLB)E52cq7CFtcP@LMx3xk8P`|cdP69}bo{LMwn11Lac&-{uea5U?41}7L zqbYdo7jBCAxB3F@Qb=I5tXB(20Uw5RThU<Ow9Dut<H!emkWDBGMdd#3lNzAxgelBu zD!BXf<<zp|`(Z#;Bh4ZAxz!%Ag%#fUTS|b5n^Z!($fBpz(OT>%WM?-BzbdLxr10T5 ze*){XoCxe|p?=6EwyWVqK>x!DB@d5aW?CUTm9weFv|6L?Qg&V;Ice^`e<ge2s@H3( zbjzkt@^fU{I(DK@Xkw)P`s@TiA*13Zl9B>2S{T|Un}UhN=l~0j*M0B1Zh^??i|7j_ zfWYXHX5gI`p7{tw{D^Y^y;>pseQkyW^&RD1LkjIHff?m%OD>-LDr?m`7~S|UKB*EB zz(I(Ld6MDj?w)Sc5oYXGPlJRL@yF<e907z*U0YI0qwU0&FOlqY&UgAEUYn`e4+p9= zTrw{@?>?!lepaB7BKKby;z+})OD=wS(z4RP`6+RZkcmvq(dVk`(+701g7{h}K7q=3 zW4QoSMw$T<Qo#2T(JvF30v0`AimHn={nL;7u`#w)XO!bWO-ZXzavTr+hH`_-qXFXg zzR<8FX4G<pjQKClQ&D>aPLNXjFfE%(KBg3liMRh;c;=_H=;yo83I=}GHE2EpmfXAy ztXAe48jjQ-l&{dWo;8(F6BK+Ri5t;rI)X4m5G1`F+Ey$sZv1YtuG(M6qcK#uTXMUj zB#avOrYm{__D%P;oZouyK-_&QGDJC{>4`E6L2aeOb=OaoUmUNbcNc>juikT*1wbPd z&JlleX(k-{brm^7-FKGz8lAZT2Q|k&h{OFZh|2XHfqcjkkx=@B8~=QoO>xK(cNPk1 zpQsH1R<&)jd%aVeLI_3fHpv9_b8LwKga8S?{CH2!0+*#c(+}dK6p$F0E&|K|Mj;$s z7Yiobmn=ABs_tu;gLhx0D2IPIhwZ+O!24cuYg&{Nv9r)vg;6snUO0~9mJ>5AygkS6 zZHhMF_w0(HfR)$C8f|yU$#AK!v`lGMO#$1CBFKY}sj7TefJ=<5a*8~DyufOtPx$bS zb7zBXP5HK}@V7<1E2w8m@VZz5RQ|b2sjy@e)RsKLi4%z0orUh%UkWB2d*}2}a>+># z@VLs>Y7WPblPtsunTn%3tzJ8}Q#s5r!lJSxp;^GT;`;ix>yholTxO>#$oVQ$`M_IJ zC}<%UWHN9Mjpx=W%Lk6Opq*M#Hd&t{i!<(zO`vt?j|UZ#8qf^8NN)?!;Mx?Y^T^Cd zZr3p3M2u>bMbBjfCNC<-MUFS1wPxE;Vz$sL=jx4dU%yY)bbV{p#{nO#zT-P`ubD+9 zCLs*W=9m}SpcF67u6w*RoqZi?LAm&@Jfc!J_N8bV49rl;9hB9D6uN^d<pmLO-J}`C zwcwh4Aep3V9uo%uH%`PmaLrQ{<x^RvbEd-Onf9^YOivv0ZXCubJ*2_@&7~=cAa6@* zBx<=Vymv3}ugSdI(dI03<%E-K{Jg~uSH6Bm5*HVTMYn^s!q?+;Q>p<&JNic|d9HdL zyPxF|$C$#+Fqnr$9~_)&V^S2OIMt3Hh3=?eLh)Omc`Y^YV2J16DAkmYdq-0f`w1{I z5>6`jUtXHdzcq9v-wn(E1y6JubXSAbe(>U?1!Gkp#vGaCd{iy`#kM9*c4Oq-)ONkK zOy^NVbnkP7tqc|aA=zYeb7dz&GvyCggz%P<M*HbW`Hom9iOFRL70$-nf>bp*_bWEV zw}EZz6RZ2Vs<SeTh9--N9B(Em-DHTmUV)2J`;cn|gsn=>v#-k@gsHIQGna_wXoa|J zX3Fk=EcP-RYs=m#wqHd3$~*_j&q61Y2ONoay06fP5l`SFlXu1yD&bh=#ber(blh$t zQ+&Qig*#*vFJh%6z#RySlV_rf*>KdhFo1+LzT;pPN$x1;mYN^0tWVt(zJ<YTK<l$C z0EK%8q~L4l)bg8YrMfb~9Q6HQf9FO*PuX(za<{HrWfb)DGnMd%PN5;`lB&+K$P}8E zVf1#~RN?#~{Pk3!m)k)MG93-Cd+n#XUhejUiab#IbAj!qu~b&$%_O*`-d)zSYWB1c z819AD5hU|`E-csU3BoxVNcyCTO=ucGFD$`IiJ4uyxS6?7(~c$}myA+b#4e$%&<E}) zc58<M{N!x8d!iMuQldfLhU7K=xpF8;O$=m%^<xNi=@UBG*tc-kgl@WRXLgsABwuD! zrsE1wy>MfWYu@VA*I@-<70N}V3%l~^v0!ZWDOoQ&I|)_gVKX*szM>`yvpoo+&{B+C z^%VR>Zm{%%z0<}=m<bN5xdepTjuoITM|?Q4e(`F6gRqp`UqjV)3CYpOymOoD5;|lL z$1I#dRjo}v6Pr=N93%vLN6ZF-`!tHg6=b)twEjF!Gm+Bi8n?Zi124*R#AuVyaCJOX zHWLiS?G1HB0vDq3%{A~~2dX*jj?BI1&d&Z3&6tcA*=7B7`Vj<qf3fN{QCNXula|@F z3KL(eq9OefS02_F&UUbRNQR*45>~(O&y_+eEyNKvTAnul39DEs_QQu(6V2jmOhp9Y zLyHopfj(7!CF?+=@y5V$Bn^u|Zv<Jt1`l(QqCMZEvAmbtAbn@2?QC`K30v9wS@<pW zfK;vQdp=LGatHWfDFP(pin-L%iAGQ76vFTH)RN}sR(P5HyTzBoB@ne3@MZ%4g&|KE zEjHoLj|~;gl+VmmUiZP)(k&~}7l)DMW*tVTRh<T@X%Kd#B<oqFDT)b{YgbfZl#CX8 z%GC{GkrbT#(9$~!QtLFo2*lkr3t2#7Z!qO*bYG#8j`M-r);QwI#!bZTn9~zkH;(`p z0xN0aath)|aGBvB0-0k}zT}?n-`m6W9pFyX!saTaeMw-Ace_ufPJF58o<20=W;Tan zgfBijj~Jg8U#;cpK8$9z)gy#Z9>BA$C;>7%O|qaY@M!l`-R$ZXHRnV7VWj2eRIq~5 z;#2cFyjKl!GR~1G-1HWSR@aM0KktnxKJoV?H^@ePZ@2V9;`_@bHz#zIfm$oPBfRf8 zRr#t9MzQzm#j`7ER?F54Rd}}Qa(PZTb5TNA$>=g@0gH=S3sr;~g;~1DvhA;R&BLw^ zf(TmWYy#D=Iga?YIf$LxC~_w@i@Sp;Rn)oe$*q@34Jf7AS>6_NL<#tI63!&_RhcFm zz}QFEBJF<F?62}w+&}P_%-@@^Q;8y1nPb%+Z@^Dhhj|e*z}8Ne>3kH5pWgC<a$hiC zHYKCZBC*Q*%yYJ5(ylSF#xZMFmF6v3YHS@|l5j5JXd`cOS+vuH_5Khu&v&aB9{QD{ z2MxEa1-Mi3H_0(hu{E1F+&%7o6QnWAhmIgio#eoj8ho4J1>_dGj1N}=LCg<mYk@va z$AR-N6Fyub%=j)L$rne+1gswp_f96r)Qf92vNT4UaLOw)H^9#myg4EYwhR$9!gZ6^ z>(&y}c*&(aTBd1uS+VjwiFLD%iTjoWg_s1|$8zx8BjawGf4)GL@in_E&HGV4iDcFX z;2sqF2&5d22>q;~N@OFrL*}Qsm=qX?sJ2FuAGsGQOft3`D%0GidxE$xrDYpvsw``! zUQQq5>4AHLD2TM`wOHk^kniHcl)IGGj{=zJy3*}8<(+QXI~>I7B2T_=<^+j%Y7L<! zn}?=zlUTnl+>vkjHAT};shQvW3odFvkq?nAXBoBp?CLo$|CpP6casC`XYua_&u+3B zqic>HMvSTI-`eQz2`E4-zGpMJ;gfx^NFQW$(Auzo6&BHhrd=0_*F_~!%Xc$w>{mSC zlcitZu>LAre(-X0RM0+%Rqiflf>oj$)?E}qsyn;fVSYAQk-V3eldTcCD!K50+h^5D zXiBH=tqdRCxrT*-DGqALka0fRNb6$G4^sGcPRs0ZGDN4{iiz*`TCHow_c`7$NPW2! zYRX!SZUo=n)M0$Chw;10c?8VDv#6EHc^bHW_B8WJgY#ze@;J&`_2!?yQ(CL@?uYz) zqC`%tEHy=}5$WZ(BXo(XHqg@uWK6EBZyd*b%6J6iA^(;@k{eGq3yuBGY|v7d{j#f= z>$)*JDl!5)HoC3L45uK0QAF=6nB}W!#<z-7zhPIzS=E+9y;?WySBZG|5}!1ZtlN9^ z7G_`caX{DamRkAKsee_FQ=ql{g@Ctevw^iN$u3suAwfIL?^5we3U#6QWvW8f0v;13 z6d~LYXsRNu)jBZODD|rYEHZoAXME*)t>zvjm6mHKyMBZpWT|B%i(;~G{9WP+ylS00 zY}oLvK8SPRk3pjRA4h2R@;BUsq*;|EO8L@@CRJNI!b`I{sgZE<1cD^oymw!d^E!Ua z5DzilF3L-cQZg@C)vJ?3o5S#r47J8hiJ6dToQGEp36L&xpemq~&I^aWj${HE4<ele zDf^l8jxv|~5}cD#+SfE%%D$Z#r_NhyhRM6B@1Ydc{(so|3#hibsBat$E=7U|*WeCC zic4^JFJ7RyYoWNi7I!c14#8=0ifeIqTBMWbeZOzk{AcFou9e)ia*v;F=ePGJdB&^v zJgS5tFLw}F<rT}3Oa1{iYpKiSzGr?dR28aQZaex|uFAK_JAxxb&A2mcPxY`tc+%|F z=9HilOle<eTfzCedH2TL0THp(P91+AZm3I;-(nCqn$6U3#S@5&o+=J7Q5isB6;30S z)GxBfV5_b%>r4RENrMw{mm86RL@uLi*yDn>L?yS0&YV+wo~vS&3^;3fCJuy@w(Jbo z7}We#%Bz9t`)^^=3&}N8yk(E%5q*5>IYl+DZ1*``{{SjnDf^72CB56n99X}PkWUsG zs{X3jlP4l+6|b7sHIfDzeye?cHp{J2zn88*(rq4M8fcC`D#y5-6keNREnHf_55o+V zofc#^@k(YRVo|S8-LMr4J)6;7o#>!gb~Gjp>i4Jm`BI+uabwvgQ2b`}Nx&wuE*s<5 z!Bu|B&2C$LOWP4Yq>6gz%TO;u(M*TQvW7gO37?c>GO)QKR-8Y6HrL0A{w8_ocrMM5 zGS)r&twL$SE>SW<kW|A<Dtc5)l4OYd3R>;CsV5omsgZKR(h#ZA)KO;fniB@zgbRwf zJ^NTjp5ZJoS5x6TvNuSQi+}KeOXlqd8fyZ}Udp7vk#K4+IG|f#(A9o7Efu_iDO?qi zt@`A97pMe=mfETr=)fs_t)Mz59@Nk(0>IyRN|rIt6DS&Lf7N{mZRNNCmS#VPe{Np? zBcG;8wL)VIzrI&&VNoPdMQV%c(2Piph9-#&$J7p&x7m2L%s&WHB@aeVHFCa{U<e`_ z$o`g@DbRWH>-YmvAO<-Cie#^o?59$+!&3I*&b@Cxt26C&M}SxBo*;Agr%4B4!S4k# zqZ2FGSGVy>d}7rL7W*vpF`nbQa~2$eupR6nR)F|S-3q_yBX7@SaH_qizUeih+&i>h zNlHo(b@)~oG~s(;5&#rb(caI<J!P@Zf{bEYs)dzm2?X;=ek@i^%-~}I)Lmxf#3oMK zVym#)z3;l_2<1p~wR4zznQYH@UeC<32am3SGwOLCq(>wVbj&4Ws%%KtzAwGuu%v>M zxLA)|O1BHo&cjQy**{b>QS>6j3JKdz*^nk(3Y+pnFM^9T^UlGwk|xGrM>YunhC<wu zH2;kgU6H{a=gvNTI$xdhc5c=&q+JN_I_SsXy@Wd5rbRzD;%#wWv#Z>ziZKA)afUN6 z?#*!$*9|3WLhs|T@vNkb`DRs}%1_|h*aOH=q3}XzhaH`b>Ej8(!-&eq59;}MBaobQ zU;SfxAAZ>BUtOQgE{)UgO&wqP2?HCLyM1k*UDpma&8pwXC5@plU!-F2>8>@TRK6Zz zo_Eop&+Tv9)mL_%mYOck<Eo`%pYt6otEm3UmX#`nxnvdtrzgn`(+F$a<_eQ|RZFqN zvQ13J9`*=Em5Z%dWy?{eB~@*WzV8{ri!THt$OhLBb;|1*8&_}FiYf80q|Nq=tv_CA zyMkgA{@hp*(N`p+*d7aA5J&OCm%Ah1|MKlgvd|`~c0y%{ce>ISVeq@~!+Y^lSH8ae zE}iC|4@$jJc`Ny(NuNvk97=uX1T0fUXcH1tq+$2{JtarKO0XnxNV|h>r8B?DKS%+A zk*E8@bd3@v%h3gbkT_h{Tqu$;v7Pi>AOpfvh2euSG4*9FHm7%t)FQE{(+T~GTUZsP zL@*Z+Vk1`pHAWw=qW1m4rYmw`B*=c0>0}Vy@})(T2CSQ^aT*U!D=l3`AAFrnW;Nzr z>{$#YD;9`?py-^I8=-$SUN^&)YwgS+aF$!^m#P)0%=qqOo-QlxvX{xn#u|!w!b{OU zmfU>|WxcRBjPhMcOK}-$Tq&=Rox~_sfrL&JWT#nA*Ln?PWH^)xv}xtJF4$>#=Ds6v zKryu4Kw#U?63){dFWf(^c7+^v4{4n9O)_G(&cOq}HqdNSEAqlWVMOoN{sW*Mwff!0 zm4(=@Q|;T=@$=6braIlx|NaM{^ybrWl^CiNcrWlFA#z4j=8P{=YHSm0jLk%_cWT^G zy^QUhDtoI}DQNV^^i3^xai`-8`pFBmJ^P&B$dgnBx_p;NNfL7EN+-9`hL66^>5^Py zfI4H>{sH02dV`H`@xF=DKfpWAHoP~(w10rPib+?+CPC(~FC~Q2RosTh4Lt0pW>SVI zco(6K6ZBSECMkLqn~}BjVC^p-dXI85tyrmf-PcRYP97ZhP*czpG$%xRZE#W=Nd^yd zS+X@8^u=ovJuzou!6jYmy6v(PXXW>3hPM9zY-E`*<{n$lSM4@mJZG$Bna-i-viB5+ zQXt)3QH;^Lb*xM?pK%r|<aT4iM)q3n?o5}PJ)V$7Dm|2X6&=>@8|40lYll$Lok<TJ z#R~I2lsn&+Q@1M5G2%xS4wPEU*ZD?nJ1^@Fg0v=<kYfuKSgmOfL!!E%dHT%yd&OtL zc%s}`L_6Mj#?Y?H?`hDOVwTXZ#H`sdB4Q%TowJL1{N@<pUa+PjWwJv=CrPVD-{*T( z-v#hN=^N|!yX>`(`eKhD&36^uWHL`uQRwoW>@mA8?=-R-cUfFLBhmPbBooa_Z*_Q( z$|m|Xycl)YFsTa#nP<cyKMTb!o<@WEww<b>!nN8SM1A$=5u?m6-#%MDjqqQ~g03<` zT;mJ_Hd0HOew{@*rQ9Sai+<PMbnrbnDGyb#$|=<R{(O4>f+%nKkQlydUrVb$_pMSk z;7Wy_X%Hl<(38ad53tbmst{o)zpsT~<Y~VH@;vzMfio>yvt&Qrn`?28DkMhy2<h?> z3A5Yb?D+=>^4oz)D|D`Y(I2J?8V^6qBpSCH<vWHcVKk+a8QT37qF~CSa!cC`q(WAm zK!)tAM-4KnLN@YG2C;&Z?J%#xVlK+WK!TdAR%n+m(D@khw1Ru76>dx6jqUZ_562r< zQNlebDOMf|VP!@qEN^?*3cal+${9c#*>2}B&d!(ts8eWrj66Ttv9r1@I%(Y1;GfWf zztSr5F*;Ro+Y7$i?bYu}RgiHDGz!q=sN!JO^YU(`Wd)sDtx5r38ZWS=Pnc3=+b`B6 zEAb=;+5pd?stG2^-<f8b${FwCs!Dadpl>=^E{jvmYnXWB{17q~hS>MX_`8!i)m8ZD zrL6J5RJuw%)Jzu%#?G>BMByggoN^3v{X9Enud0_P&rurI^1J|b!)u|vp^dAE`8&_F zh)qWOvn>k1R!IGq#9f!?<`*w(a87wjbVs%HAc|vE^B24EJdBA-9szXCC(>h<bt*WC zKXB@lqL!;4>Pja88GXQ`x;`gzyyRZxeZkak9Eogge_;-TOla#oWH~`ZCd%{L@pU)| z%$#J_dB9Z<Y-5p+q0W6atJKQvfB{Q*k!z`Ue*}dlW);Tg75V0)tcIe<>oc+yYqK3{ zv{{t54;1D!3e_MO%*JyeO$dFlu48>UTnS{;r;k!@7*o6_4%F`Gq<akG-Q-r;?@HmC zixcd<%bx?T{SCE4Z#7T3p6@+r_cC*k%xdCi7TdTF7kMs)saIsQeoxf?m;$yfo~hmq zW|^<LG&5}>e#=pzC!1(8N(8f&J?geQ@0!JCFow1!GO{*qSwDRYV_L*j?1WygW%r9} zk8921@$E0ZnqQiPcE>i&YogarGBWFL^GlEDPjIO8xacp)sv~^MA7jdi6J7Y-a{`%= z83nq?M;VpVPpvne^Bz@f@|Rqbkmae2-vBnB_ZQ#N>+cWtjTQK_pOGDvqCTk<{%z_C zHE0nX^oaOX;P4U%x{iA*L}PI07i9h2HQu}y{0|Tr#w!|;Mo+vQ_>@G+3hpgtLXo`{ zdmNp#<*3cj3<;!xk-=8(m~`o>YQB^wtq{Bz2Oca%rjqLHsOH=&{5?by^w-(@o>}h% zd>CA?7ab{eq0%tS7B5S1Q+b>du7{cK6mwTpU1^rP(WYEx2&{f{VRIXU5EuRr&~5c6 z;acBHemjlnBWh~$H|bfQ<BX&qZ9ziY=bU(qOpn2oxtUTJWz`=moVb{h=vcArI5b+@ zi?Ni2jot8q*7;HQK@4^r#2Ku6PDT6N&Fx|ZOE`Q(Jd7Xe_%cxL(GTe6{V~e9ZvCrH znOJ)~us7Sqc60L+qsQ>9u(dT*lO`D|V7AL076qL!q*7b-|CJtJc=k1aAXL*$fGDeT zYF4Y<0*1uc6Ne&3O6>CLzouB@@y`6^USbwKH|*jU=Z_f};#L{!1ECE9uZkn3LR{wv z&O=c5^{LQrGV+f8ZXR{Z#`v|psU=O}mrxHTH&c81v<C5>)o5v2VrEEs9#&(vGMCm4 zn9<tvCxf-h<@VE=Z~hjzOEY_{Zj!2UiQeWXd&sRj{@B@~+s9SbW-P6*J3jc^<c&*| zT#|7YR({Nmy+L<}vMX8vP&51U?p9tY^yV$J#k);(NA?Y6k^H`Y&)^)G9-Q;>eREoM z1OMPn=<liBAKIKZ>o9&(gDVcoq2dcIaF_7_OUU!8y+?5gRkhS#6L*a=)0w}FSI>jU z>Nivme=tPx|IG6;_J2BbA2@-kg@noR?vKpswVYJCfSPP5OOnk~N%pi}f@j40fn_)S ztcfh){2B-B;ueys(BJg2HI?Z3E+XB*s&a2^gZM?IOb`WiumXKaO7ojkPKLP@BV(27 zqvI~jmuKhfEA@>+z|s;6=c>M~<du&@aVH}q&Dv5c?N(7U_qBYfp_;J73bOHnKwd%( zM4W1oPD@fHAf%74No*>i_96!A-PWi3Qgn+5LMNC)=IX=`_xW%tcmga@j-iV#l)v~O zTx}<Fjo-f4O5aGKY3Hd`@*$NCkfgqcL_KO`7+<Ssu%Ojau~3m)enao!BN+S5m|h>- zb=>|=J8WIR`gf+vy@{KW6~B>fG(ller&HO_Cz^s_R9>nxTC*R!<gY02HS~ozRLnU; z6nt+_{~x2qAsDS}Cd&y(aRv=!`lyh%V-AX@<_+b2W~!YT>nNL8Dh?|9IZr@bBl6k& zwWAi`l`xjAl1C)Ve52Xq<mt=B&+Ypev%G;n^Qxe7MeFHz0?F6se!jPg8t;feiK((2 zh52ZhG6c3AkSvxEE_Cc1pq6&##Md;5s`#IALCU~&W)@u^^MJE`FFzzXX_gdyefHz7 z<biCSSizS2?A?zO9VmlOlzldPl&4I=A$hfsd;-D*o{|T-wh-o@4jD`?mHHo*%3DcV zk~ybFLQQJ2!In`nV@r&!-xs$?i&L2MQ)Rw$wDNu7x=a9G9tmEu<}JMNG9NM$Hdh3t zSYAY^9XZ&wrY%kUq{+r$7&&FIUWWJ_-$kPC>o_&am%2oSZMJD8`!Ws)Q?s_FG9Vr* z;Of-iGMlLilw&cA#%?L7nnfH^N@38f#qeYMgmWv^(ZyL+JsO=-hM%qHY1m$eoJBtr zoxP+~sSHH;YxE_Nl%Yo=;DsX3q{c^1S(jy+ez}L1&jXA&iLlN_Wa(3>W>>xy3ggXj z$$Oz}3oe8q(eGkPgCCN&kFjMj?tx*^Y*h39im!7bIBbuMchY?uw6i1|--wV=?0Sjc zU^9n4o^m#ICs7>Yi^Z7?CtpDY^a{yN8@KWMjEyb%eOjyZ$1lpUYL&Dz8S-*5wzNMA zMnjN*gPr_C){@;hyZJ9{-v`=yg{Armj`W<HolVF)0nEr|Bt0E-lXfn8bdos+=`~t* zZm&!t5&U6t#8&ylY|gtYL$jGGa#IbDag2W3b1$9;Sk!VN)QGrPR9pCBiI1{$gEI3z zm(%77=B97=YqSl-y-wp*XuKXUpk+M4A*djzK%$#W+Lf7)L$yf|xoDU3E9Zo6o0FrX zp<b?<6X^~>W5RI<?WBAbld7T=t*W6DZ&9^~)Q7heYY-V|sIO3|{;dil7SFfK>k~6C zd>QWYKIZ9zwIB~857*2=$1pwe5bWRpsut2IjLrO`sVS9N)x2)nYR!*O#GLabyb@=k zJM|3u_^E(i7#lpn)69!@u6?cdXOyX?V6n{K(BC%dQt;^b42abzLW%K`vV{G9T79aS zq*NMYg06lZ@|f2y=5rcD)B5WCH*S*3aSCLsLY|3vfF8ww>oirG-8BVn@bXE(&3kzx zPWgkBPs%2p$0$7i4f?ye|Mk=grG;`$jCruF?0SO$5=dS3eE{FSt}eoKdMD+k#$!X- z59!+9e<OuVLp9E8xNR#c8vRr8XuY+<6NqZ&;3^zGLBObH6FoJX8X}86*t;*9sk>f2 zkN%wc*X<_$M*O7h?QGaM5m3;@AF28!FxxeSJ-=F~IOM8&hx~fd(nGK%0=IY1W#;#W z0Uw#rKLB;~5i*MwA|0J6vh#tKVObtHS^QO3QZ2cZgznvxw|UwG9X^hDNEo&2y+?Fy zZ82{CdHyl)s(3kQLW!H)sPSyBEF(1miVVcug>MMX{7p%4@O|(4hi+ngRX`_MNt410 zP0#H1S*4$|sy)p6Huh)lwnO^D?lgp^d=ak^jya$xwYt<Geo$ulFSpRG!0p%8Ij!QL z@O{RXS;x!eys^4S{cblQeo1Sqd@DVHxn%PU3sq0wLUs?A%NTaXFOplID;R}TLT=nJ zr#P$G`5Z;}P$z2m%EChLW;^_PiHBM|jS%bXI8mBnm6RBRvH>Kxg$mL&MSrx)=1bJt zokZ4(2h<(B1R835D>tsg%Ws<3hZv<C*yhcc2px%Z`=l~Vb@O5pM%aFIde6@m+8LEs zHJ!%mKhu7TiNNb+$}Ls+DZec4(PG%5Y*lFZjDhBnWJze;kE8xqi7)gOPm_{Rd1ID` z``B?DlINo~NSp#m9}(Vn5R9aXl|d#vr9k{KA+}2>wkq-$&Q?POQ9?4zg#e}N26t{w zV3ck`vw73+PM7Y!!B<s82uckF+q_o@lbHV8%2u6Wg8HF2mMkkVudzym*N5==&*<!b z29K*xgAb&sG*t{fA1JUQf`)Agy<KMi6thnJz}r1{b@~#vZq~M@so2B3b_v{5scdmq zJ`A)}Q~PwqcUJJU7}JNkRqE06b~&aX^0|sd`6@$=Fb69mgd^GcsWiv8Tw;l=+Rue_ zhxijSHS4zq=8e#6{X<F)b>*wdm*`2p-Zb{0wNVF@_fpL^{Pg240Z}TqSi-wG&Wj5C zxpb+nLM{wmzp3RbpyDW3)j9m+e?9xt-B00mf4&hf4A<ndR<TKqvf85*33(0+4_Yux z6`6%Vimit+M?e#<aZ^od1kox?Lh+WoVQkh>a+RDNqqW)Ls46=pAjhSRVDu<uC*j*a z@5Y(CuxJFOZ!8zSR(ZwIa3F`8nyR!w0_+6$0&ytN^W>ZMQpM(|*e&mCV%|74Z2X7p zdVqH!4(#Ja;f<WluyY2-@GS>+KD)Gc2_wQxKb4zy69X5#jsa-&A-2KAAMY@?68F*J zoBOmbf}TC=g=F?hes@)RG(qU`TPp3|YsAS%`8Ora6i8_@x%5YPy%AhRMe#3k@Xk6w z&o=o(nk7@h_9iO5CDp$$yzL-C@bu;JRT$HSyz6!-TTISm8!2teNhFUV1c!FYQiG#U z%5$L?VFE?PQ7@5<+K>0)*S&CnSS*sj#`%|DG^$JuV?THa^P&diU+Ecc0?PGj=1J$? z&;L!i1g^euHiTWth)N9Gm)p}>_^a+~ucTU6g4!J={dN`U5>I-QcpgKI@@GW;^x5?- zCs^lG#dJ&zMS%9TpJd3q-=tG37|p3!;7GB^u+I5zl#Y{f@YA&MGi2D9^j0_XEy1=5 za|I<8+RQMXbB-f7?xRuVQH}L_>RWZWY{A5($-GOi*_GKB3JWp;oy6kxV&e@@n+0y+ zpq+xqEsjE+I5$s*l~d`<T_LJf+zb2I)MHe48+-u>pz*l{t-08_k)NNx#MP%#Q8S?_ zILqN9G-j3FP_gn@9k04^DH`csMI2a3O}CemyC`TZ)yRKOHk2@^2bSv;Ht!8Z{MNVi zSax~p&vd$m3#9n)QC0V57Vi)0vTS@hgMqOu7NZCrF+W?Io%)9J`xWh<3|*T%tIBDB zk_(#RU&MrV_hT)_M+>4AW0MEOFfHLF?E#uTzVh`Ijf<%@;Pw?QHa*YpmIZcJVnNmP z4-mF5mf2X5k%n)UzDoI(%8#dsbs{eS$~z}Gsb2tWlgu3F%T__QiL>~N{Bs$)DgT~s zQ-0Ip!Oytr;n-cxc_?b@4@nsrd`~{AVkEi>itO>pn*k47OR0@UVsoxG-Aw$1jCy(z z!x~=XX`HTXhk6osDFU9YV#K4$Q;Y9*tc<9nECbEL`lJ%}NEO9StYT5cc;o(J!0Bq` zg$g})xQ<t9Zl-35n+%%jv0VEnn9GA*PbYQw#AhF(D<BNa9{Beq{&jWQX;k(hxGy~p z;6e~vm(n*lExhX6TFWqF!S-IoI7|0A1_ruU;(9*&c6j#zyOmq;P*J(OgJFvp&jRn$ zUk#CKD$zQIsp=M69O1f(M6+HNjf|^=RGy$PmCELOeYifWE1fPou!2CPO!=?kXTk4_ ze(tzKR-f9PLO6HcSJahUz9cZJsf{2`itFlOVy~jV83<24xWR_#u-x5svOdq|B}uEP zP^uUA+04QbX2G^$`D1g-vGT*SdM!UmmM)~m<t63Hi<Kj@<{zLL`)2mwW7D^{I!DV1 zZXK7E|2eyVQ*f>PP3RF$=JsU<wjBQV5B6X*X7zRp^c?TJ$o?-1l`UZ<GqKb>u}JaG zhp4Xwb^FCreV=$%>+B76Ls}ilZvU`XG7MhJAEGK8)|M<X+v1B_ZD&!Z7Ca5FmSc(i z17O#|z@e-_Sil)LL^uS*{~P@u4uC@q<bt6>sa(Et!tkKtrfLIMv)9f$|JR>a4EPpe zlK7Qn2DemvE=!|SA;gnv-G+c=R-^c+mf*PV^8Of=;@eWG4Q{DKlPw{yKK~eT^CqIr zLZwD#a;d^xltE*W?Ci%agc+a+T!pPtExabY(5eLuK{Faum=<|93w3c;C5^=ZY-@0d zyYGwlJmw3Jh{>NS#YxSq4v&Zy38c-Wr%4=HQ^>c~D7Gmk9LBe)<-!#qRw~lk)QMu6 z`%b4S8R&^EuCUZx0i=>-M#MzK+Fg@!wMJZenzXSDP);LPi_Gjei(-+)iLR8Emr3=- zo5|lmP;1An7N4O~NGmERkesV0mzW@vgor11+cq??F{MYA^tt+>o)QVvqSNl+f#fwJ z2c=V?v-GQ4C5vL6p_r1I@LH%qDhbJe#GnsRyQ~%8!Z~xSeFK`-L>gGH6t21X5+W10 zKyrEDBJa4KJyjeUX&O4YBpT^OJgv6_ATP>)csKMJiAJ<tN=6JkG-#-6YAS~0U->KW z{+$80Su@9asRPz>$LGjuY0pfn61hR?XBpV*C$K`mHc9VQ&z>hexLxiL)Mlt)4WYJ? zuz~B<13nEZ?XWswpi6?lR@8*vp)Wm@haA41r;^ki>;?<<MSDpu;mowK?i6v+*nBH5 z6l)X-rtQ9#fH1tnp_H=&vTLEK!OB8Jq)Qxpk>v|TO3PLpfFbs;Gty7=cKyJ6d%`?x z#8znou8OO)lj@6H>A0mfW?<<kTsrw&T>7ZjILmiHL_jc?3@sSQqV~1mziy(6i%XHj z0h1d$(V=K)cxY&7l$wIx5}33F#$kIH+>@o7@4{1=b&lpiazkk9H2)R0Chehm#;TE7 z%E`F!)skPT<MU+!Y_k3<4Py`$)q9;tI-Xl&7t@8Anl4#_?pFmt$l2x)7G-b7aZUKn zO&mX!K<0?yQ72&oYZnWb4vnyqS!fhUE`ym)F2z=zMeD71KrLDW;ETC$7UdxME(+Sf zHU{KH#f7z3tr?+6fiM0XlQq~uO-{K!2+uFiQ}oPaW9j&<J!044?BVbcv)&JJE%Pwz zR@ABoN`Cx^?BwuJx3JffaA)o!irc5wy*7^Tq7tkutzoT}#+HT?-)2T*L#GJqm@@9J zPTl>9zY*tMs5bIGRytp#4(g;dY~_l7MVNV4^FGoX%7dg($Of;MeEqiP`YBvrE;y%g zs(ZppA&pt961D-;m{JGrtZ$zL!Eaw;lU@#OncEd3A0&m6i@s$S$R#4mW#H1sM^T=h zT>~-2i{~I&TA1+Qfrofrh-<08B>c9GA-o<vcVY-`)g6L0+z`di0BKWg<;q5IDi(ay zwI~DhDIagwU-kd{XCI#68Rc2TuU2%!tGIuF2jgABy#w4rB9~_K$KbZqPN5_kCD`0m z7un_iR%#LO8I-MZcmqw<*y&QF$hx9~6BocaDujCG4rTP9@SP!L+T;vGtmgAwixYM$ z#&@~}F^#z+(_;~y1^AExV2P*PE_&DP?o;}S=0bU;szzR^h=OnGJ=6dH$6kC<F%)|M ze!%9hu1v|S`X9f+v3x(b&+Vtb>H0tAt{UuS`9z+BKF5j&(~+Qopz{voFz<ovB)-`f z2&s%64c*oYy{LBm-M2X4QfRoT_*dtn+FfQKJG1%fM{+J_DcsJC3DcSV;|t+BL~Sk8 zmB2!_|5~Mvuh1|kM2B3uH4a0vm3OGR=Ix72_@zEFU1+ZV|3112sWS>*?;|bnp}{&- z_QWas`#6MAP?q60KUG0o0=?B6D8L$BL!SqSzZfSWm$xGEzpWs5G%Ed<RNOcwGJhAI z^=mO&a}Mj)^p%8*MCGWjvN9^rG*Yr%N{t;yUSLcr1Q>*-Uw$)L@UYI+;Sj$)a8DA_ zvahFiL?JAa9K24(U@^|d#>PZ%*O9QlQ#AMgxMtz6y;iP-#i;=W_AoJj#u84u;GJ%f zMa)Kf;04FBo=w1J+R~J`94Zw*&e*s8*|emYAf;Iv2^Xp;a&kPadwvQ2M$p&#Rhl>F z9Eo<*@R^ew#C0@PgJ@e0<}sDIhbUWVS=Dj}>E#@I*~kkRKn7<(?j2AB`8}o-Z0(CT z$b6il8H_|l(dhZmyFSXCJvWkb_gW|p02J^6`pNJ_>HU?n<9dEQ3(@YCd-R`KK_Cz; z3;wiJpWFRYq~$f3)d0?E%y%;*M>z`-P=F4DJQENg&qZS{!Lew55%w?hS9%Ijd2vRb z99rN_z?58<_lHio3D98iBKgDuM^H0xKhP=MlcFxoWdQkr%=pPwkw<=SCd(OFIZE#$ zi4cD@V>a{KLVaZjE{KA8>}AKK+ar_$aqI+%3#WdR{-l5%R5q~S(@zASsZfWIDnCVi z)SkqRs-Q?*n8_JLq((%=c(3srePnK$MUKTAZ5#$@nM`Yi#V-&ih3o%sYuB`|^BX5O z>-}z}5dJG;hB?}nb)XxYDWe-@LIcl87>Us0EPJ*`({h;Kz*G3(-~Cc{>TB&sR~S$O zxr7=GWIPfpd`R0<qJX*YGC<u%3%JRH(h0+iJ|&>RXhwFxJukcCvkXS4I&fVD*N}Oa z6pA*?sT|taDA<APEFDz@yFb(uy3{{P+EDodexO#!JS1E*oqz@ej`C<ttmvs&X7z(5 zI%H>X(8^Jp8nBAA86y=Gls<a^Xjf1b5D1V7Wwlf>q_>WRigYu1Q7UG5d0}h`{tl5u zf;~f#cev8yP?4J#-2(u?2iPN)X)>iwSaF>XKT?c_>u~$|iBkM0TZF^-g2<cIBYI=G zb?`^j6)T3Vz|f7LhS#P*uQ}$D&jhmOmT7ckhG^TD1QD8I5#(>QQO4ZsJ~#xh0en#o z^6bXVN<Zw{K7tj_o!L>bENBvCf#2S{X|lY;7P6J;P3b+;Gdi=v#RtAevkgZ5j~~+( z7`~$m!xtA(i29l}GIb8&%lQoN7~mBIE_8lQiH(5QW@5bm#uwlRPTo%{0aY|>X0j5Z zJO1vAEXMhTBTJFkF$z%<uSy)PK+zQc>Whd91OX*V%$Dbfqmif497{zxDV$Ot>h(5= zoKVWtTtre<{`ba2J_`IK&!(^K-s7YAm~qLmiNm~s`Zw>f4npt6+(uORnD6u79aI5d zEl#YTU1i)wiS4>7K1rx=^*jlC0de0k8*4@OY`;zOe~L_8WnC5wyow@uLLMrXkXE9f zxn2dB2@2csFn0{VMaMsF3YaU=;^xBEIcdW?bM;p|pqdP$y=3bqsZB<Elw$yuUhnLx zhQ=-+HNeU=ATT2ot5p$f-<-;s8r}U@rqrE_>?bn{{s8Vu@HPG_kAe!lGf>33>^}w% zq%y)7!q^T6nO)VMIes6wMC>>F*#9Kv+hX!Sy5(gF#HZ2A{vZCOc1kVZD8thgkq;_T z$6l3PFX1Q6u-6cqyP9$jh>A~W;F^7){~!t-m0iv}dIoNpzeZyEG`I-}lh{fZshMKF zhJy7rgubt6lqyN!0v~)d=pAnUatOT^{sUNcnMO3Nq7FrxR>)&=HJim1Nq`uLP<FYl zhJ}=u5Q25*+uAkwLiqbbnq_)`EFXlLJ;zQX^YQveogqVH{(wM4txQ`Ej;TKG1Ha&b z#1Xi(G|86{eOLaFJH`;Ckb+6_v1%KSL_;9p^q7S7hzJwbaS(3!w*e)q0ZT5d2e2k~ z%6bGxccn&gAxj?zqcGwaOaO*0Old|OCP?HX#S*<2<?Cp&P^y-SSHgp^f_tURqpdNJ zr(fLt`kduh)-z!2Ok^3mNvU#Voe&8u#OrkK21*&m?$V4CZhVan!$*xC8XmC-BCTIZ z0FlJ_s56mi)iP5OZ=a{NlDYQOvBIPS?=WlfZqc91=~Y#&-%k(z6Bra(2G%zJ0nC6Q zn>qS91>*e93UPbQIBanZ*ywZR>bQ~NG3?l->5AawamywN(^&OL47oRXMQ7^fZPZ={ zSZV>Z7p`JCX}t^sWCPgsQC`;zk|u#c`q$zZ2aW9x#)2e))cD-CROt&qTKgEhX>olm zrLI&@pL_Ji+Ks-eyUB6u@y=uL|6Vj!24ZkOy2yvR(`p=!f1aH)Aph;V4ha&<o6cu? z=8WH~Kq2`4rP|GGb$I)t=S3K(SjYLcvuhk1aVUB^bO{C^!E0z}P`z_Us;<Xz#IrHG zIuggAXpmN+rU>?(3`F3k>hO(A4__#hKs`q@C-#%B=!kVUgTLjv<d=;sWOh}^nef69 zdCTXSqu5cgGWB0TXps<B4efB9-ZjD@BpbC3E}kM?v_lH18sgRyjK?v%llgi?5Ik`I z?QCvaDBKL$csOU&C&PI%(UI(%o4dZC$QyQnUE)^Bu^>IqSEs&?6-L;USBf(NDuUQ# z0i+FbB^6CJO=Ux}s`NN8xAEu8&<*!~1JSk7i4SaZcS7AcxBggq_B#We58aKuib0<4 zx9|+Bz2oMjDApR%!67!3zrxj--#H8}C-AK__2oy*)i38sV~EO0U`k10cp-8};cwts zq89G5Qzv$iUO;jGxPD^Cr~P7aSm-~+J&ikVS^hE!PR_q&g2gl(kKo?ij`H#GxsAvv z!FHBC(O+-WC)5!21=xqWKq^|J@APhqMq(oOFn7z~+hz@^Q;ydNu|f=_;t1&<+xb~T z+mn$S`)klQi7zQ=5PXtp3XxYOq}Py!q&-%fq}wM<9)*tjEcF}}nC<qQ?zu}9!V-~; z;HFrEZ;rE3(HFkEjDldm5tj$@1ll=;Hbbm`fWP36Tc0fUrVOIRFYHB~{)-KVj|@1< z+9Ncn6TK`Hy<PB@%KeG}fGk6*Te^P7GLfRN6zr$h==`X^d3fdd_4BbQt)1QqL9$}? z{Vk-u4J0&3gXg2kp`NL><>R+0M0oFBtiVguk@uF?xIgK^YL$W&$Q^IW^&U#|+Izdh z8jE?<f~)X|x6ZSPZWgD5ffJ56&Q7zL1z~4}gkLX!C~az&HcN|YNP@+?CuvdU@Mjc! zLItiL<L`%x-e;QIF%JNBNe49)8;TS;jd)PU)1(BXl9VJ@*@y9@1fipv<Vqe~3;*Y< z3^UB$uUmR$rxbeymjY0q?f!wgO0(lLi_$NjCtMlA^w!quG+pMd-t?cgx_^DB%Lu~9 z;aj);&W_XJF+=;$1>+77WB7)ewW-l_7w;lWGi;TMuClK<C&ayd%26->-}U_8TGiEV z@F*zs+-+b4b4gRx4`tJQ6HEqeW9PET0*{j@Eq8LoN4>m*DQYN38%n0j%&}RQNE@tP zcZ98MZj7Ij`TqgVyfk*#`KS0fk(A<)H9>j@py=*lNaN)%4|FMVl*|C?3<JPO0~;(A zhRoa)Cj0wzsYvm!9)%JST<6UGQ!Dyy(<&~=k?UmS^JR?cI3%*DcmGQgD=PY>#}Y8c zgPVC>yArnqK>B`X-d4-9q;)YXOtcf(L@}}2=9@T^WHMh^MaMNJY+QT2@4n0X3kFa{ z(jemS$y(0MaAW;y8{j~!6(MSKL^Jw%`PzWJKcu|+<NH|;5O-R(VH~&&?-11}@_+Ou z>B*>R=4%9OOEA|Md&WTtEh#u9hXA8p%9mfl-~-p};vHkayR@VZmMumn_{pVjD}=N* zl`+yXSQeoiY>_~Fm9PwSNRPB6+#^>Y@Dm=YTx(3F#3tr2Q#vHZWgev0M9hu>YEQSC zr?7^C;IeS61q5e92+fK&F|Ew(i>v(*i`zRSIhUA*X$#jmo@wtsTBP!A=}*LKSMc*K z3kq;yY4<Y|4h<07uV~$JzyFBf<Q5q%jxOCGQhFQH6tMyIf8WV;XG}@2qWafjY8~sc z7%JyfY`QH>a!yRKXR*DJ7IilELW=v864Yu^G#4`bFmOsS{u9TMGDG$p2j9gouiOUJ zcwpz&2Ni$>P(uPZD+r}}z0?1}fjrYzB^Hj_L<W{huraMg^P(`9m9#lI8Im)=F8XHB zEM23$3)g+A__9tKgDZJ$nv{IBLe54r^^U`8xWlQ2Ei}0XI7`d&V=^$pWsJ)r6^9)J zg+yl#A%8&A`e`65XVV&7-yf|dp%rf*UadgIhB=quW$Vx#UZM9COBI>v2tD%wD_6AX zyiv$~YihR_B8CZqFcKPgo`FDUIK<~4+q(?Nfp(E(R+~o924p9mLJxiXQZhQ-@OK6V zeaOcYy`6@zm&ldrtqre8HW=R9`xr+q_kXI}%j$&l2YdmfO<eI?XvbVlcVOby&U*gJ zPy!2rN}V{|2K}*N%(_&;Wuh5b`zTDu>$@uZR4J@#;sB<}{S!=S)}x}IpB0r+++@zN zxg;4!B`4!O+zr4uj#%c4pCQa5&0`^IY{e!P%6pB%iqQp#)og-Gue6pQ3z|tnFd)?6 zGBYl<@WNK&H=6Yr*A>_OQ>ThHi3;u|5|HT-t57IEZT@+&J(t%Mwz(t15liQ<ltw;% zDEC(0s3lfe{Yo045x4O7(Qx%95QZp4z8WKz#f6<-KtPTcK|UxXN>t%!9;H*P!`IKz zQS>)7*m+ZHa?rX><0?Ln(%OKwg6C=_YqH()kE<OjoJ^2GW7>u+hbL6{eLc)PTq8Vw zlckEt=j!8jrs#abZ}GXaj$QY_yPhPzg-Lvco}otPJa_OlR}a1dsivZ?dwkpH7RJ=n z!S<$}*kVW0%=-=zpF@g_q-k<$Z7$a}S;7UipP_uG-^Wf^B?fwo32aP9QH!}OVn{5k zOOysBVsR`8oxo>JecN<2EeB5gi77upogv6&wwf>0g{YDkNAx!&^mCXkNH@d11EG`q zd9vefYx^sd{5osBe>sE7*M0CpXAreYR>1qyxmy&YnSa@(OS*4qtsat_0dT!|tZ$5b z7X>c_32?kO>j`n1&m&)cf{9uAQC7aDm3JkCi@L7J96p2hvfDObp-}b<<&~c?_oalq z(ryP>D5(doCpka~&p0u17oWCwY0MpKJ9VE(1LBmX9ci8Z0X{k5{u~~1?EgazR61_R zdJs7KDj3{_^$T(Pt1?X0xI;!lB*bKhS|d$uS(k7<Oba?8t@c>G87$wr%fvX+>v+u8 zt9rA3U?(<e#6sqzd9f*MHpuFF`$S@V$Hf?8O<Tn3L9|}y9ez&;Kggv9iTxml$`ymd z#Fu)D14s2rgPMKM7~Qa?25k9EI^Yu?m~JNt45dFu{K0F_OOA9=w{o(ryivR{PyQ_$ z7k@`Ue%PASW4;JA$|BU2PO-R~`@s))6vAld)r9s1tdU6ALRj3{VT`{M`HT?|jEdj0 zq8m>Zu*)>gu%^o$N-5?P5$P@QhhxI1maJ#`Q|5rDnSjV7ha8WiD3)1v9S<d9gUaEn zFGnCiWCQ-Nwc~uZ>s5Tl*6j$zY?RgN*hMq>f`Ne|!`nafb@bW#hNeT;IByxGEdJW_ zJxF)xi6>`}zWA-!e0obMT`(OTXV;*d%NoP=IK<_ERV~DgDZ`CaR>A`JuQB&ghFa#Z zUq~~k%s_d$I>vYRLn<GC#!(BI<<@bu5|rD<1`_8tBp7lENXTjJ3x>ec9gr5HO3i4( z9oX~sV2B()x^_?8vP|_9Fz3LdXA{tm&kq*)+7NXJ=f>7?=T1OLA5=dfa3Dn5Bae5q z@0~!NID)n@<M5GA1d#$}q0l=xd)9FMyR!T*<*KL>cQX@OPsY>Mpv|x@>?R)@4r7YZ zszM)Dq(`e>OO(xxeuUX64MlH@Gt^j9p!jl>IXw<o=&Kfz3P4cDfcLujAD{!@R`@rG z$1GA1K77zM%TyhA!Mgu}8>muk2vjr0xa(TRTAgW}VI2x_LVgT3B7;PGVe&^eY$|N* z8-0@jNpe(%NdN~$MrXpsYZR?{2#Hx}Hg7^piv&(SO>%4iKUR0J(PYv#7{-}d|G)=3 zV#P?)2s#n9pZ)y_PWXTiiI?>o1cp*ASn&DmG+3w^+mJkApleP+p-|$8<}6{6SRT90 z6(K=2?i4;g2C*{*;*D^40ZO*7hz$yuwPEL5S-*Vt_K{K<(E%tDLE+ywbfJEs)j@;y zK3D}SF?R8%r{$RfQEeOE%S9A`)flPf@oQ&@icHd=2>s#Q#j}CPk0^!Ww6;cvYpfSI z*M5GZUOAti;{N!TtpI#qHEBgMTBg9`ls<2<hjSP0VJ8=AScDOiz?nE7E?uvZ`&q`! z%*-&SpQ2D$K0>mdvavBk$bj6yV`}&}?qustlS#QY44O!<)CRV8t&SdO&cVl1{9rQ+ z&cRPo7^ZP*E-E2vF1^8115EAbGj{lqNo)6V4Tu)Vu~hk-7HGT|kde&2UJG&vmEH$N z#oSjcDiQodPjNbF!x&i_3~J2XU8WG8ieRpaJqz;i$$q2WJ7#RbrcJ;E7&kKd7j@^k z;&aV+BtZ&XYH!VOHl0C~sdus$)r}#O4cif`n+kzSF9+P11^56fT~nd-NY3t)<))l< zSAUeW_<Kj;bCF=LMp3EleQRCu8FntO3@8`2MbpkPRrh;CI+{~na~S!V+LtDX+6Ben zB3)e`t8vdrW3=XcJbOw#cpg3uUo%HICn1>&TZ@nWf|lqC<Vj={vxzK#Xhh4F>=_E$ zk)tesJo$1_egUZFqe;h%jEn3?RdZXx;1`n9+L+Gg_;k-WoxYD7rAb-u_Es{&l6q5P zVqwnMmZmVXmh-wtUbLY1%^7i;AIvI{%&E@gi-ycjQ#XSug`1>!%mW0UTIz91nrzLz zCpw8!5X^Gp(3Uouh`dI^lS~o2$19k}Fx^=xbv@GgtUQ^?CmB>Sjl${3Qd|<-DD)mD zgGpcRf;rZX8P$!o#SyvZM=_TP-y9P*p~gmN5o2VDbcwuDnI^hRqcHv0RSK8Xc!tV^ z)uqPvsxwB7Hs~jI<|D;;x*BQqf@chL%?vBDL4#e|*!vS)u-NB`33S!bl>=@=@R`Vy zuhnLY48q;}Z6TzDhV_Jo0~(PKr>xK1a~bFFK!qj-Sh__<a7`L1{SzXI3JN0OX#F7g zAV#d9fdZB_kT5Go9fQ{t5=PaJs++EA@?xZct#qAId|b>AWJ6z;U(tT{Oo|!GK00H5 zJwv!B@af?<saca98?GET&uP5v!JlxqY@8B)_N86~s5w62z_p-Ai&Nv=Mr&E#jzE=V zJ-K4>Fj>G&-aDy{l`JdqTwiKOMZ4s^)M5%e0u$stkd19PqwjF(OAoF+b}>0sEVTGO zm@brXPR{##&lBSwao>TjNn~nVvbHtY>Mi1_4s<q2bj(fo+?I`>c<?bRLxztt8yWhK z<CoVBrzF#NzU<(8rw4_S`bhq2ipUB;P~zn*cGWH4+{BDGtf@IQGSMxtva*?NbFw;t z7gxiF8^FxF-ck;~3Oo^;V&R54w`TeiYz4W(^34<gt&vk&A{?)NjV6AtX}L}&@~zQ; za>m0@%M~ar7`_b;E5FX+d;2#YGFl`W8p_W_B<ztLfA4?1k^uY9q>{t26|0>Rcs;sH zc%|wJeJltv761~!4MY}fG&Rg$llr=IvLYGvC%N$1afN}@(nn=5W!9k@8i6$Xow0fy zZ(M}U#LiAf`bRj0p9>-<ejpbFbJQrHGPxoDN&Ns}9gI)+z?Ef`&zTYl*L4&GdMC(u zGf>dnn}WQ1pNZQ}ZM_Yd<US9jMhZs{FUC^mk4YRqRzBj~vH=afB<#qDCNwUPlmsV) z(UM8ir_CCOR8(DEPv!moJPXl);n@@f@vOOLib?+Ze$0$KL}S~&bv901_UM8cB@EP- z`50FUNlHN~qZd@4Sin<Fe?rLH*7va_#?i}JJe*0Z^es#s?;CIbidU0~i0s|9{Cdnw zj5vX7vEA2Ul*-0S^BSha+esI1VoJQ-hu^g)a$^0muwfxk@UUX=)Q-r9?}vMMN#PEk zmHf09AI|C?K#M^9G7$6PR|hEpiKbQ5n;yHqb(F1gkl=3DkPT!IngP4`hAoTm{vu4~ zQ-bDo+zxbuwd+26!7OI@yt{wi{kG!R`egH+v`{RBvZan!OdG!<7HSXq>>N}}V`Vwm zPHBy+V%ugc8s9S(_m^|3cBA)$RRlu&g}1znDuL;xcRUV}`R_{>w?Y<TpV`$Upc9U< zfl0l6*ytT{YH^~&E(XFo_fMZzaiLwT^=+__U?7Le<tvdci}Z_M%zxpr-R3_s^<TZF zWMr}0`$>Nu0I*^rFh6AiwgnzMhnmRZ#U6$su7=tz{u937pEJN`r2%G8tVAlcu&lkh z4A;;2oFiDsDUdHwuB>AEtIHi*C^ZV{aKSm{-hB8r&9X*v!4@M|^@Zm5E4Jp}w`jv( ztmV^-@*~PMiaOKkkY4XiwMm)yL^u(428F)o8u!kG75y!rz?vHUOh}gZpwWJg@_5i~ z%a`BJ9Y6Tc<fEgG#3rxjtwNmf-mZ0P{6N_1lg1EVEJwp&^O-K~BlVD9Y^366S2LhQ zV=t7qyS8$h-;qfmd8V7z11-wEGtIBa1W|DEf`I$7Ikb1M$wIPN{ZVvGN1Q^JvD@9_ zDBw3^`<+iheC)Z**9TNyTZMO$aNVugYqJ!r;i|^&;9t88cgoG&^>CV|Y#+__x_7-t zC_6L;%avm&&RpWdDu&}@-2)4-s)=TOV=0yM#XSswZUshM{8}qyezN!t*}hidX<cz& zpI{0W>&g7K|C2SFI4qs3i_GJ6AQ7}OjlF?&sXBRm;@8&br-^Q%evFWaWsggCr3RI~ zvD|OmjT@|w)UHcy`joDQY+kZkHSJw|rMpMN_Kt9vxJdegf~vd;6;$vlxibw6kaG8# zxsVPha=$@zwxGXA;<v3yxbU23S&5j`>R+<<q=w`s4cP7kt0!Jwj;uDOHb_1{{R)|o zZv($u@%A!2zB9*zB}aBF1-pv$y-jE#0^k?a$g4TW)=SxEu8>Xbp_A?d7NHi=Zn|TS zN8svmh78$Gt??qAx#5IX8~{21u3s^i2;b#Tj*Yqn=%}-A2HB`lOxlt7eXBmoF$UFA zF*18IMquXN&ya@V3v90d5L|Td)vqcm?kuHl?S4;kt`BDDN~Mo01i_EUZ?cw_wz-o> z0TaZUgv37|C@14PWon7c9{KPhO!p{{1+309{!>x1^Kk|rLr!qx@J5Nyb=z?N0Wf(y zICNE4A``Eo3%(41(JBn!mLpc*5fj9dqHIIZsAS1Ezb@>sbg7`{MsmWp?gVt!w?Umg zwWPnIEQjwGkcOBR&T?1$au`Oc5Hb+s-tymG-y%6H_%p!tFbyCRN}w1?OKqH7Jlte6 z=&9=Sun0eDv=k`ZPv+By+gf*)|IxYmyCu^Q%RdXoN%0Z#t|&g@sL<S(5u)zJ3+%SC zxU+5$a>dUszJ=Jg_epP(aJl1$oRXv3v}Z(euHvj9GhRU~M+vQ`R)Xl<7`gL9T<MB5 zcoQ(1o12OB?EeAEp;j(2EJ5566+hRCGBkHX#pW<=nnck$)50Ja;oL5UpgrHV9YL9? zIzyHRPxr*ylcYbKcS#$MQEmK<mN}kw5`WS!bzmtvlex5kP>#>sR7r4=)xL5ETEju5 z<aC7m(1oJlvV-Zvp8!s(sCfU(NF!>AR84UK_!*LO&3*XVhV_Cr7_@~IA4xm;`*360 zD0Sb)0CN%t|L#M2c^eMPmhYiZz`?X5#ob4gwkd5U^%loE)~#U)(~0u%t5iGzx3n*W zGx&iQx*G>HCnr}Eu=CK_+mxZC(Ks_{e3+=qacC1g{Qx0ziNQA?)nWSwP~}3_r<A~k zd?ShN_*^iI`VhK7=Av6v8a!WOi$^0&+r%83a@)#aNDUirrZj1zm9>bCaGiciBuM<X zLq&mikI4I`b8R)ZeiJm&@R1srG|sWpDT<#pvFUVXOY8#*s+U;CYOXswg6(7BJf$OZ zG}(-XmZ5)|8HT>XFPLJ(H2c6``;3uU8rh4f*$TsG%}Q#xs^eek4IZ;x=V2CJe1*`P z<sSQ^jcGIIKP6RZ+66!QY}yR@KSdO9^`pJB=i~SxEmvuqW~w0L7MRc<4)a3T-*)UC zWr1{c@uHqmy74bd%Ot1xD3zh{QpRIV)_Y;v6-{zUt>uz^F=ilhStGz1Zf^jMLKfeu zKGgJh&5UG!z@Qq4#&G!)?Ndf;=vKr0`AkrB>Sy*Z_kM39y1M`Qtp2$q5bKiNtGOB* z=`1$A=G003{+K;?j{B&cLN|<%tXIF>o~I#DtvfPL)`Psu=T1ij5ON6EM#DT~{4z)$ z5RBYCiJV&wxS$#ErD2}*4~{Q>Or%U*xp>w81AWOjB_K%OC2K#>cBR?BA3)>=;O{ip z4YX#w@12!iar!%F?JHgl6=Zg?x3=rW=<`uxL7yD8<S^e5Kz;9Irf&HBeH1aE9mRaD zUqQU}sa2V>MZ?L|tnuTIilXjBwTTL_5mguH#H(Q?1l}Sf&mvx+!F)J|P%!=)YW(pS z`cWPA<O3SA5iihmkOTq0$~ujcivq1|R}1oeStJ`vPPD?=4>(9yrpYb85GMAy^z(+l z^+hDud9=MTXGvS6@Dc2|3V&;O;e@3su0HnLearrFN;PCWvuE|W{eB1)yWUI>9RRRL z27I74A1REP1Z{pfe%ZA;tlJ?jNRu;rzJQLrS84MMPY2h9k1j{8*L7eT_8|fo0Y`Hw z5z$M|6gue2%X?HR@qT7aNu)n_)=IH(N6~gR`FpTN>8ca1ePQXvHL?;&#-~~N4v&Gs zU&Wnm_9_oDxJC)hquGXI)E5`uYB&?B_7mMn!l_Xq_#h>NU-^)q*5<gyi3TtSLi2hW z09DXCSRX%%kDW^vXQ~>{$}R^f%%Ef-u9;$cW$0?CafXjGN#dm&>#3wZWuGB9%qK)F z_MI2ssgAy7HEoFHsQ&4uS>;`0m3hhawMR05UtGpq_7Hc?P-609Md=DVe`}iccIe}i zRnCd&*(wBIeX-{gxh`fbNnUWRE;qVW?1+&cjv?YQAD*?I^$4s!T>5}1(IgRqj43I= z86fVJuW~~YXIp#Pw4SuTg&QR03J4AYTq(+!_T^wJ@MwKUVrj@2_)I<C0emX)A#W1= z=6`D37xpXU|D$;f``mZDZ~JC9?nmqr7;9hj?1jU*RL&ecEQcWAYfHd~I}$@qZ*Oy^ zetZfg?kcJ=R;I@6q*MVUo#Her3isO|Pc2C8b>y-j*y5Ru30#)dl#&P~2tLA;sMLuP zBd*)vE6R9KD;)302pcZa!R_O3D0o0n2K9F{L8ay3G@>O|$bYys8v1X(b?|O2{(XjQ z4)4_M!GMn|7x_OKUN-UmUroIQP#fRd1{yTDLvg3LySo=H?(Xic#T|;2;_gmxcbDSs zR@}WezyJO2%-zW(GnworXV30?PM-6~Z8kls+4*k^!Irln&DJ6sIxnQE;h@U0m3zN| zBb~$&g1HcNP7Qql>x7?Qt_K*|9L%1hntFx3djwuRta?}-_7=1{^|TuHM);U2KY|=p zX8*G!<_(2K3BxQj9N`+<&m$q2e&fCvi`S=5rR^kXi}Bguny{XIOBDGk{p~zH6++-q z+G6b1`T7+IIf$e!?!33$ai`AZ+oKWSjM`jRlBG4%hOPc$8jVm?ifs4F9FJHF(|7wS zWXl~K)f4$X<Y`}X>^VMMo40kFx|hxJP`k1buH>CCMm^ZA`^BI>28X8Jfz{+>MDlZ# z?Pv|nXaQHSA9m*~Jp6U{C*oY7RYk4+$KkcPAAge=Q*Z5{oLJaFCzhlt7v&at-jye2 zL<0Ku2hVSgVn6Oczt=C=^CFTK`|Nw+P%$3RAq;q1C~rnUYX(9rQ8zs#7(b_8R5SHx zj4*`tw7bf-Z-&r=7tyDEwQG_P=N?%Q9mqU;#hf>@E7p26VMm}a->jsU+mAMko%5ci z?ceDPOE?T#EjSGN;D_cLdf6-ZOtKh5!D`Yh`0ozlR6}h{)ddOh&iaB<`kAk#BZ7or zNJ8bm6#xDQI4}W_2Zh+pNtGxjn_$)R6P(rYljYI%YVqr7dL(?Jz<}Vm9oSy(&GgT@ zTknOe^l0~T<3^!FV0-HYN96LFzKq!0veWN*Siqflf3=5+ioszplpB$LBRy*(;!YF& zfm;;{R3=lSx;6R-5I?uoyV%unqQhlQcl_0T%EUM`R^nmn^_N-sw_l1qynAxil|aN6 z?TQlXQ;<OF-*Gy{Ez~qVt{Lb3{n;nV$@Vl}hrp6pw!eb?xygLA;!s8X)=m8+{spSV zP@_ZQlbXN$bYh$(W4=hn#}Ivaqb-NMC(GL)_<_p}i$tFf(nDXRzx1gbmK89pbn~_E z+A(@01rWfXO#q@A1f)%znyv!gIMJwrrQsWq`RjZLPV9@732QphNYQBMLjtc^@{$(` z0z7ixC%XW4Azg8!9hAic935}iE}&=pELA(S*A>#=M2Qz}E==w@1dm&EMF6q}9O@rA zcBpHrFeFWuI@jtE=fW-~H5haZTKz+FrZ`Pn?X{1lDhoy@EXF_)8FuV-rv8B&bHbXe zRk4L`xwl$e1St11HF=vA2A`i%dO`f9mLKF4%W>@0YL>>Uk#VdkNphTKAYotK>zQXb zmD~Yj^?@Mz9de*4#QsdiWcN}B612}Eg126~YD8N-&1!Ayi1o1)MhnsYA-(m?8G)5q z+4rN7!)j9IE8m1<5~G9x9G3c+LL8>birh73m1-#@TyCJ~k3{>xSGIMwO68+8f-RkW zY%OM>G_+5Y1CP=UDcTDCT$L-u?b8(z3^n?j;Kaqi3-YG|F4$HwkI`B9E$Sa&ahw}+ z!m+6zZY4wr<DR9tO_x5fzJP1LC14J&*GU@g;{8lYp}Ebb{ZN}C!pZ43HT)HQ$Yhrd z#kZ=dk@X~!j*S1tKPHAPeV;FHR%a|0*A8eb#sItCfRe#TAx?k0`?N}y&2ry8pAe`s zEUmNbx>-!-h&NOCm6H`oB*^j=D0;^1JkG2Y320HGr1~F!cWx#5Pj|zm)xEaJ&>yp* zD=#19G27N@ed{7(4N#Wm)YU51Ix0J$XGU5&&6M2}$_`;6Nmyv040@q8FRj-#jt}*N zLdz|Qruy&JY14u`W|*C6%gmf`I4bKX;TkBTx#%j1rFEPpYAwbV5G@<QKmVlVi~2qD zV<B<y(mnWUgl8(bH3}qq6vUfF#c&~vYQrcCnU)zp=hi{sGLCCv@Amd#ZgMDRK-#EY zh%3wE`KGcW^i_V6qB*OFg<q6`XA;n^N9drcbv^Jz<*ZNa8aaalc*DOpTbCh5PIS2Z ztdW6e@dB|c5|?GT`6Uai21B@n{y5_mfzjGnqoxiasu30GxiC-HXWYKMcC(^^3n7SV z5dW6;t8K%xbB7Pvb6xz7?t;2q#eDd`lCrJ-xyF~sop%Dhjkt>=4Nci@X@vB;DEo>6 ztZtop<(%4xJUzwJbCCx2)$c6R`vx~<$i{R@tSDIkPzA(Je>#UN2(#Z}EpGE)9A`UR z(8o`o(I7U=(-=<rJq=g3jM1>Tc?Eu0PL$~aQCovx0V@lD3I1#5neV*n>gu}cn}!N% z8Ia3f;Ir6VFzom->JCErZ>R|Bvl6DsG0-{iCZVo0U6!1gX`FOAv#!qTAWqh0WYb!w zE;Rn}R{WNW%Z8K|W7(tdmUEhAQB@5|9Zqm7cHcK+_R*&4ex+9|^f&gATRVFuAm{`M zSRR1D=v?L37#;IPKIWw3bB{04od~LnDweRCM~u1{x`t?fwGFZ9=+U{n9MLCbH$Gqx z4WNt#gf4nXn=r3a)zM`HzrIA{Gy2JIpJ^Ps92hqd+2?%x{J0moq7VA0a<Gm|=sG-n z5Z2bZ47`qbD}H3MVc3?8@u__h?Gfpl4JAp9X}#JAC$D?gY&*k33x-YNQleDNlZNqP z%8_voUwm?T@gmRI^|4peLPAi)RiNU}dAUk!__HlI`K0vKAk4alh#=;1>YWUBe2^$d zjSRGot(%SEWsI4S9-5$B0{$mY(HMrAzkZn3tw~>;WOCNX{A9dfbjHc(jdSIG-U|&y z@@V{E2;{h=Xw8cCvtw-5))L45AqN!@e=wQBm=dI=h-b6w;^3PZ%8(|9kvx4!b<*S$ z7k&j@tsBHSQO6&ZMUQ*Or&w~i1qT@f2e3m|R4E*O+?(1BU9df1-^1LcT;V~rHpXGj z5A00HGn$n61?nY<@di)oXjVxKKc)|bs6;`x{OrUEHH^C(WZ4zpDB!ZFUEN7yAm@}^ ziov8IFoguU$->Uf^T$l{Lp`%f>eH{g9T4SCnr5KT*7=ZT^LT%jb`Prdd{FWR@^aJq z((#x}XT#ohabQ<0iO2%(^SsuGt<3SAFNu~MygQW9xc`o<U$_<752G?kOtURcNB6=V z5)VG=RnnXZ%hiOS7TIUjjI<|S*4G5gJHtz`xB)Kr-HbQ)T;%SF9_6Ef`vNBWFG2p6 zI{x(GAc?K%W>{re!94)qz`KuES93;n0+U|jxNzZhc71);+x%c<Bm$OUd$wnLWS-rd z6?&Thl@g~ch8SgFp+Y2+`8)Jg>MLGW<xhWbEc^y11*wC@b3KlvZ^{!MvE~*)DQM`^ zh3pfq&=55+&tyOANGk>TN5GC&#bZ11Y<+-h$6Tl2AGgBQ9@}kJbxFu*JeBdrK(N~M z0quuGwg>jk%5M;;O*2>WAK)2#p)En$HC~Zm)5`?e*wWJU;9+lRPyM5a5^G;_q|^9( zHU1e}XrFcgDU2nD{~@Far$bt51JaA&o3L<D$}Q?fnPj%D0TG;T>Bsa|@*xAe+loM= zf4b3%6Y*N@KS1aP(KqL6hU;^`wx|<z$is=SIhUeVH0Y!BVHaG8Rl`mxPVS$z^`YBf zU6BT@-<P*!cXy=5lnO6Dtb}Z1x@;Qb@V~)b3sr5-=0kzE<|kFyELrW36b~Vejb7T$ z{{Ywdp~UzE-sgU-jrBN($RlH?!)xn|jOk2zZPs?J-3iax&B}B^*!n@6v1b{A@m;Hd zbKq|(W;%iUGr}53V`P!j)%*{T`sbbbExVZx>P65OT~}S*UVrg39vk&k&aPFkIFg(k zE-QYz8>9<9s8^b;v-t%0?rskV2z}NoJZ^oZv%7ZxAhQms>p3;>x8Gg9;e5HSHm<ng zl3U#4{Y-X*EPhV^pn70XAt3FW76bzaqE?|<TR_j+n`PL4fD8sI@mId3P{jUAV*fD% znTaHlU80?XEPHHhbzP0cO@qK;R*Q40+zBCLiB_Q);r!~lIgM%^nr@VyAC(%LSYE=z zjFQoKVk>B$Dl*(qVhq}LEw300^t7y>-b|FnooMi$!1<nG6w;01;z<mLG;o9zf0S9H zq5~p?vE|F+q;@;T8JZxX>aOQIj_wJ5dciQPkyupE%QD95Prcrt-g4>Zq))mNKC~_e zJso4J62sCci`I<$M46Vne#EeUfNWP<R&EP;mtBNDw7`B=8y1-luA|xCp+2nf;jc)f zarbJmh(VaZdDWd3Sl)zkyUCW>o~edqM%l(M=*CQNdpZMbwIZ6&T=XvIsj$d>uX0IR zUm!9l@>=FR!357?JWnh}q{N=Qf}t{zDh^>~FrBO!hq8-Aq<@x<q#wk9p7Huur5=X? zq(=l)D43YUuEr@IA|H^u<i^k}5-H$|KJ@|5U(VKeV~tsUfa0$TGoV*bK?oRu>GI(e zv}sfOWj}0atO#BiOiX9%r5O8+xRJXMRgVO1Rbm+Lq2SO>5uIFt_Jk8AXXt~#$hMf1 zBfv4+xzW&lVt6cmM!j>{hbxP?{8#WCy2UyULn!ZLoL+x`5B6w&=d3wjj|smXhw7VX z^%tCqiBKnhE{P~$(JTj%6h6$*(%$xLp_mHyeY_h!B76f+yot1dj0Ajcg(~t%KkcVz z6yt0WBW@D&oXe#-M&1dQWLjS+D`7o<*6DS4>O_1#R4YD%Zj4qaQg5}k%Am@ZzZe4# zHFU4HKdffmSWQOeGRp7Qmhy4c!|&{&0*cGH7q(yQC#r!bjO?@$R?!%HLl4OE!I1e) zW3w4qCtVQbZMOMf4U?W}S@7=(QuC#-4~PV?MS<hV{(=ddByQWH$`$wT0w3ph2rx0N zOMb2=--ZF#svUd*$2K!jI!PtE?7V*WZfflj`+#CXU@EB?5&AuG!+noDZq9C1)?C&H z9}p54HmH;S<xf3=1Z!Zl{L)Rqq#y#HUTdA3-6tKAc_9u=?_qi#M)JK6)jt5n&S1;g zub&A;p(^I2L*USj=iL8NA<_RY6%q=ZU=Akjfnx>$kkBwt=&)!Qq(EhGE+iHXCU)Zg zRAi745RiaZ#?SDlca#sgtv7n#?K0s2rIN9&5#6n^71HWgsCU>oXa4Q<|82TJE8@O4 zWw?`^F^MZ*iS+arFkvy`0;*0FSQjvf5_wOVozmd<J`vNIogs@S5E>df(9(pOCu{=r zp(p@nk?8rw+)YpUCojHqj4)#_Ax?UOKN2jGzane|N%_-95JPce@06WN5A)gCBFbwr zsCg6%)$|FD;$GTv_NR(OI`1C_N}?-p%6Qk6?*@EQF%Sp|CzzlN_u&FJ2e6evbrOt{ zXieTbR;pXoX1($^?u$>8Aa3cjvl+@HENLqu4IzquSn44K*j5J!l5?H_h)7hUs0K5d z?{*x`4o12LOHBD@)TvQ!>KNx{Gw_@_r)YdoB0!Ok%YXmsEawYii84{P?vF%Zop3F@ zt&PRS4hkeWyMq|)5Z(05V64$=jESJph*10TIIAI^J<x@UKEMBM!7$LXE_Ba@xgy$n z(uXLX(t*^oYh9z^=_z_gCWA&3uM;*(nxnY~6E5-2AHT;WY5hJtJW%)t_;OnnHY)`2 zg?6@#Mxe8^vvF)@bS*;+j#OE=yt!wr>opmaAYCBm^Yt$`$)SR$b65n?ub~(;($>6D ztYe_-@y3?v_y{W}v@jmMe=^F_Q_tKgeLzu8G)*aa6%iK^DpdltZ?^G7f$A0^=%-{E zoD+eP>o_)5&Lz{i-Fu$q!00@h!if*&*4PP#=qtsXB-Xtq1&iG|efbrARij1vS0UI` z-2fB0;vrG`<P@6b*06NiBzmXH(p6QQdo<GgS;{=w*OdS5MtRmf?Qd@P;(^PuRT%uB zFLmI}Mss~6W{Ts-W+D~AWmAZJLK-3J_%}fk<9kYK30{(4Wi{C{lAmF`i?5CWKNoZc z1})*rqI3EF$dtUj`tHs-rt6DXZLAKOg7^ihBoB|_Zj^CaJ2h(IPSVf}O>{I$wifXD z%8W;=zQ%a7E12c)f&B0iX+&xIa!w>oK~AITL^Sfx*WI)lm&nGI-OS}<!is6K`1iKB z9wvG&S(n1WboK-(BO5rBkrm=`no=N&G^+dK_evKbh74PRqD6dmdM4WW)$buu`x(@H zM}hCEl$U9k;vx#-^^d^0(NajN;iO=VZ!=(qCsPtx8%wvl>&-|F?P}oYk>Wv%np*lw zDv__a2prkU8ymPkfQao~bGuf}ReM}aQdNCJ>2xD00v3zA1Gm}RxcOcOUirgOXaGp! z(DMXyEEQ<p7Pn4EM96GeYT_W9@enf3tfM#{r8sRJC>=CWl#x{u@HG+wcO#uWsEsRz zNayH<H?_=llyuk1!r2AjC$W;2Kof-);4~ZKGaO2Zo*rB{$@|KInnc28IFg2n4vuUF zZvK>t{CO1bZ>(#mf`j$c6vHIL`<pk0gecyVrtXC}W{(~QyBFdFxREH947Tql!JMmD zNAT^u_^th!0u{G!*5>IKHt~DTi63hom`CEFk#%@$Nm9^J+Igtg4jt_v8x}2+Yj18I z^Gh~;j5jWjkhY({gT(*WKsjseDY<+}h(`Wx;M14e_f_}XW|-n5BtoB<GNu#MPKv5$ zpY}3yY$fcQrRHiIP9@I0PVTsSf(Q(#tEPs1#uMY>gW7@=s7`cK=Sl<Rcm1Kh+MVXF z!VVFk0!(gO;G4?A8@k4mYgmA=uq;D3{8wld{a5Pc_Ak#<k>l?wO9pkjP|qgpyIMHS z)wcTP3J!#ZgXV*eJ68s6YBK)-L$ZCL*Lz?QPr^R{xX#L=g9W=#03b9p0uUDFzsO*4 zx(hhY1qPhw0#@y!VUjzusT$3}Vv$maDZ2zG)nik-hU7Q&QL%h?E7)b{5Krz`GYL(c z|Gz>EB@B3-^<_>l4I?p4Xe6D@7jNVcj3u&q|3R>V5c4hpma(aV_E5o9V5Bajan%t_ zf5Q+#Wjspf2`Bdf&Fs*<D!pd*n3<HM{7G7$Oj!?2(o`{3wFZ7$+(WM|+b<hA)R;Gt zsYXBURF%n33WXX(^Y!pWMXvZOw{pOf*_umFGQ}*u$00jLnR{6r{IKUCK0C{!8wByt zyZRKZp*$`MbS9w?HneQ1H5vG+gn1(X^KJf1QViyOPj?$ArPn3GmUdG`@2m1l`4&I> zIdML#gvZC%!&whlTn^Lq-rN+<0h{5lIM&!-R0!{YHDI>hy1m=@>qL`Z@=-`EgsRx? z>`wF-<-cJRKxp?z6a~@-6LB;^(2nJhrVf`Ya=+1)#?C;7VBQs$rq!l&1EXZJ#_}jo z&5pneUuJ=hMx7uC_X5;PS$4UedHGITee4wjsdj~BojVRb_$t>=V}@VxD@4^pugu-m z0W^%sEJ<b8!M%5P<&1|`8}`7PzpJ^mTizNRTf@n4X&kr+bn7zf8I}s>J6`2S$a*Kg zoIZIno~fXWPrUK5Xf(Lu7Uua1AhqKGgbKKGSl7y^8??TF8pxvfht+h5Yqh&-)A^su z#|qBn&OTN3mh?D#A4+6$d2~SlTmTY)ANu+!TF8a9vEqifcNgD-K)1hJ97K?jLz|>e zX#De%lPUJAl`B;}|MSRPyZZ~|hUX+J1#;*j@ttTmvT5C{j(qF5@MVrv4jw)?E}eCD zNJX+N0Aesxi<8OmCr6=;gh$xf#?07r*B^)z?kHQUyVpBxP;(>!tPCD?HUn#w4HxOi zC<;RAsBsAQF^ADod!3l+ngM#3Ppx8haJ@k2z&%i?D{pBHfu6cfe<Z0v@?J?Oy!zgR z;nrrtX&j~dLBxx>=U~7dbAlaO0?&ejqa;ZyiIWr}1oM>j$nV9&?gjVtxTD^9SPJpO zy1JRsF{4QrQogfP>WEffoEE7F5{?&|Br*NC%>~2Hi}InJySoWG(;VmZU=?TSN?mGL z0G>asDLgK=9i|<`uc{U9;jXjV*a##Ku6o4OeEm*ui_!u`wh}s-IroY{W0xz-@I(df z0R%IL8PuKwos)HooZSaC2STk|$eO0X)j()EKXj-%cY!I~B58uf;CFg0NR)mE5(CHc zCeQdS|Lh$qB?{G5*>F5DKjxX4YNY}#aV9em_1s>z=BBcKe~Kvi7(r|$%HrJY)A|Pb zX7EsjAXR}~(*^~SNvwRlB3Iy=hepyIJ50#;%@okrwI44|f|7nDe~ym<b5C*ixBM-F zva34MQW%yAI!qWPi$Yi3kyRQtN3RBFThyt~`w_o(=q0R_N#qs3W+26A#rrjm-1Jti zNB+Rc(_X)XCmyIAO<KMAfpZHoQ`r@&BU$j!vGQ^+zL6U^+9O!671h*H-I;QF;dfVa z5FL|5xYF#&?Sory+SmQ4;5Cv?n4_@VZ2Wt*v_lBiVU5nq<l=M;kgb5V9y-aBe`}*D z+S=SWJ@b#25=JmdvLdtN7F-;ft&16dJYFT$v1P}`jfGL7H^n<u&|Xn7y|vKYVv+1n zNUeuuO$xg;BG8R{h0sS<lNE}@X(^zv7^m3mCm!k`Dqb`tYHgCdviTtSka+Iu$ju+x zAAk}&2)|aOAs<L;pB!LX$0U8hZizjTDu<R@m+A*8yBdCbpbo<UhvM<ea{h8Yi)L`5 z83-u~f#ch-(po8G&{;;2i%kGfoRYXJd9qIl#8Jk(XgyM@yxZLM2bqz5HdF1}1ec@T zf1k*<lo~kt2bc`#{%}C4`;>U}L@>^>?H?d~2weLi-UH&hPRfqp>$%X(<U0M@>_V8W z+A$E?8_y|t65AfxtMU`5WsBZoFYC(TG}t~v5vDSk86)|Qmkf~NPYw1tu*q~Kub}5O z4FZgPt*y>iz4>b_1u9<}$#uwRYGILflG{hnf~7xDkY#TiJ=~06GEMenVoI3Gr-&g6 zsi}7O=E{U<4-6(8g2p9E+K`wVWdkqEYELr23ri#vq0+U?%_07tQS$lv?))~T;QO^P zi$(}*ho7~O^lw$*LO|Q<dQZcaGoh;;b7DlK@#q4`#in&US2BEml`6$1sT!SMGhIbP zo_Tl=h?1AL)3!%X34o{EflvUuxa)V|X5?S~d1vuVS&C2ZieKAoM6$zHbRwF;Z=9=R zn=H`YHXWNNxGiTy0WB#aPvlqXR@Ve^S9KukNv9yfOEXS=i&g&_I(p9O=>maR*4?OH zM4*SK<+I*{ki0wSoZu2&mo`;>taztuZ9j?1c^I7{xs`!85R#wNVum^BS~wj>fwls( zKqTgc`F+CW$j`PCdjul1)x$Gpdm~#$WEy_B<xLgWbOBd2FF4k&@Zrk4FgyHtMfjc* zdoU2E^9CxYCa~6^8M&%gud@=0kYO}G`lXyaMb>E5dJ~iSbCuFd&%2P(KwHAJYd+0H z;7~%M?eD40a-ToMzIL+q$ULwsu!8_b&zjQ8m}nB{^{RAa`%uO=o;yizeU~?&-b;El zh1*C;+TcjvS#7pJt=3-d+?te3`*WeizOg^(!X|nZ+Br7RkZ&r`M*34<n0<|*`nvR( za?~Je%AzntICjfR&8UK8H`iUE=#nDLrEI#Q{CIFa7NQjZOniN^XDGV?9jlgJm4;|W zg)f*O(=j`{aOP9s@w@vF|Fo}X5aLnfdTlF*h4WZ(;aVPH3~ebYqL1&&tzQ3J6F$Nw zs)}zMVx!@wTo}*oRL>sfFW)!uvUJ>)^jxA!YKCN`9vJV&T(ibCovY^`RCgaAscuT< z%EC|9wTdmYj)OmuSyv>Lq(R$vDl@`MlTd1M)`(rJi?Vc3$+w}F9hO=Ay2{4AZ+)(n z1a=Hnl|A9gOnW^nB7Kg8>x_U<wmJ!$+Ah7vtnDu8OwpbO+^acYS#)2)UH7+r?AK|~ z_`5bXJ>nke786kR_pA}c+1|Mzdnw*b2$Z`Ev0AzB8z&b!2vo|v6SjipLv?ide@f)A z-h2D@l{py4TbZF^MdRT*kS_oA09$q@yo3R?FkrOw4kqk=<QBoA?y)L;c`rV{PEe0; z|HO8Od2X18;o6}bXYFym<t+bNX-APtM6yX~L%jQey@f@bHDyf@guIpLKDtgQLPG>! zO#qL?_%{5Il`eE9Q@Eg97^GsjR{mfA>CydFIwi|@vrWQa;r<>spmuo+yy3LZSMK~F z%R60G?oiAo;}RG|7-2bho}^`ba3kE_;vYz~*qPXUOz=VsTh#n(H_<q8zroh_hr|tK zJcN=Ed0uPqP8z3Iw!1dmilovtzwEo%>Db)zHy!wdS?XV(j>A2AAi^VX8xfr-op%`b z9W@1%<lF&;L>-a*^j)KNmU!6Keicj<OSIYFli_Ak`D7}p+?64k4$fDb7Bh19r39^; z8}OodR(qA>5YZ3lr1yhI?TT$vAdwnkNBs>%9ysIZNnYIEr}U&w3z|F(UXKyn6;~E} z$OD7cm96N>AdQP0u^N1)E(u|9uO^(5uzQdr8u!!5rS*nz;DJ#)G;a_M-Mn9XG2U;H zw^|R6r8+K1f5at~2c8J?jbYmspBFW^6635@aTg*_(*2b_jq!&nn*JK^^~p%KNp5S0 z_uhkmgir?~(+7;x{y=#oSsm@KHQ^1FnT8{PdOm$Cl7;t#vWozu%s_V9i*W++swte= zF^j0Q?snCc;RqX8l^xT3fBA5fk_=!YH`s{d7o?=be@zkFlo&vD<!om_zZx6Eqev|0 zaFO-(@tt_9YKryv2|RhZ%kOT^3wKl*PnoN*T@MQ<YsxMSBAk-6h7`xWE_+wPJjeUl zJk{|0)Q(!b;9gL#L`$3kP14b{#7{c^q$4<u;cMG!Kr4`iQJP;s$-o6G_^S%tkY{m6 zXT;b9MwEMi$1Q8c6eT{K=li13Rr)7CKO4>Fnmoe3c0`20@SKX(v-_99i_;$AN8&!a z3*|u?D9Y@tH%9wzTzxCwE{PUcp1s_~pFvu}Vv2nDA1>REH~#>fKqUHHi?x^GTDXhe zrDMZ&_)l%&UlqckEDShn4Tj?oYWxz`e_QUcu@}&l&?jAnYa%jRN2{9<LbV<dIV<3+ zn+aJvlhM$z8dLhz%>JArPW*1;YMz{zTRkRQ;w*N&mn_`&O6G5l-x5!r!B6TLJ%<Hl z_AMQ+CWXqKE4HoAhal%BSad*W0n|4<le-ES(h-d_R9e_W*76poJ{DRuRXI|=9Tr(^ zDFh@w)0(HGgP5TLjtf7N>CGX#rB_5KM%cBmUxjx{5{;bx<OK)5C{_lRayl0`g*C^u zPPSlFFn_zE&LdFJwTfh@-ccoMMh_#DF%Yt-=7@##wT8-nSG%PM&Ks9Rvsss#*<i4+ z{_+Q+S!_Xzx6#Q9<=VFb=&sFZz(H*ru{5$7EKd#;L#P|2h^%62!6}wx7z992rUU^h z?Wu~9($2Lps1)psFyJZUf7{+m<@!dZ<2<eY;swsc1!86nW-3Y7Z(-~LlNJIeJxnwV zOjj5lEtESWEJLNNu07LR6TQ7KUzY+{ON#YZL$(Dze+Mc~bm6gNZaydi%=y(L$m#yb z5A9sb6^@|uORG$3#%TFJSQjN0)t6gr?3+UM9)X9}McID<o5hkisw~gT_1GXZps3C{ z5JgDc-V{nfAQ;^%hdS}d=2)IJ&K0|kpJH!QcT>yMu=F1Ky5MLJH7E4q>%+%xLwNkN zdf^5L!;*#jXCc&w*7-sbLDC~CXDvkw*Lw%Yk2Mn_s_I&6N^5k|z`ljCzBlbrPT%VQ zW&3!O6=IxwT-4ErN@PyQt@Um^kt=dX1yn<Sop;>1zwA;}zt%Nq-0KW~od7D6h`OdL z*T1O{mf1DgNy#0UQmSe0+SfdoX6?{BXbVow*VE2GtnL7lDiu&sno4yv@w6g}{QGN~ zsy@yyI%Y-dmEDSj5ga+NhgzI&jC#*kuZC+tQ=!mtdFsubs(K1^BN+A;rm^b7smq|o zrSREv)3(FAgD$$KZ`QxP&XqjmBa*=xN4(6Jf3+!>ByIbD-1fb7g)Bs^CujCTH6TuS zlV(GWkf)jph?d_I-GnvF2}k1zx<AEpx|%wrtdGu(MwlYZ3nP8vuj_9cUsQ*T?=Yd` z2v!oq3#E9R(#wRH(AKfwi^!X%iDDP^^tQYcZ0pD_6D_u$VRt=n4puYNOrN`GWj*SR zz6vX>LN@g7;hE`&Nx2u=-Sbvclpq=6C!*uWlE<k{bAfm>Gtazs!Vt$OU?d5~I8j3C z(U~fhzT$iHwvf$w91{6|e|ZCL2nogb2!dX1hAv80JV(B=sl2?sM9(V~_ee(8JCOhr ziM##v?59ve`H1IC5?E*ONB`U;tym6y0G}|dLzW7tl8Bs1jejC|5ZO3};%n^j$je%8 zw+~S>em}|lzypprq&$?T_m_Sqle{MoFL@voQh^Y(5^3IMgpHQe=oUtYbiFPj<t*T` z_eoV>3#mj$@eVUnq-%$m_MeA-+tGOZyq&(8uWI`F^;kl$uoQRY@-%zrp3~Q2B?qWj zWcTjr7xTLm5n74tppe5PcBaTu-Yb0`B0S)(RgG1|&W+EL<pPyuW$N&X--dP{k&eEM zu9szcaSdgQ^gaH<eZ}kdGpe!gToo|N)BW@oI*FoWn2wEiaq~yNjG31iq1w(;Vwjk| zC{h0%G3=9OpKamq7##68mcZ!DXEcwqmb9woYq4!RE=RJD^nZXxP5dy1YKll#*Xn18 zV9i%Wk>&55r9ssFLgSZMiufwQXR{csf7fe#hl$ZV+=T|tavr1xPTekEGCoJk4sqRK zBW43z7kghxU+`PO^xlfy?r?!AqRahJd+-vYrlXKxF5f?ZZQb;1r%=+V2sqJ{cp!wu zs{i?wdhYxs@^ds_EDQmQKfwKSuHYQYp4y#(2Fp8Tc_sB1LT>AAi4>jGoFOa8DpBd7 z-+8XpTpYOd3D?9!PnA`LgTirslYwS|uC@FfsBo_FrQoP}R4_tB3r6ChU;t1MU_c)H z^dCY51q}m$ghfLKVknccU}57JVSW+$f1!A&|DgD1Qp}pbFTDC!Lf{oBk-(j!V2X=q z*r4~j)M?j{w&?)4yntEgWnsck126^i{Z8+gcSh;Ey=&G{TZ7Pu6*5GP?ebEG303yv z9C69^7(NHhhq1Vkl@)?9$^?XM6zQMsmDD}`UDP`F^`tXtVM@q=yqaL~TWB{uMMBh; z|Jxct$tz+}bDt0o5ClMtAad5{n>i;zFzSAv>o6@T9KQ>^byHe|3JHQlzyxiD<~lk& zc*-42QSom(nrn7RD-^AuiO#J;Cd@&j{u#51%DLAIjeocl_sK5#W3TV7e%aHeX!^0( z5fl8Ljd?#DhN#EXe&f>msL+&U&@i|zwr&@puL-@RnYHaNCR7=ou!7x7Pwu@1a*sLE zzcTFMG=HbunCq7}DACN)^j%3$SDD)uN}zFAqcVTn3S-qfUcIXz4Jx&7_{}?hJN?vU zw^>6eisccII6I3IN!gG^cktowZ(s<YJotjJ$R`R~xA}YI;=Y9Q`Z_ErVron6UJ@T4 zN0Mh{rJOI;pzbueO+BQ~b!D{kZcdfD2Z0pG0(#|^`(~K3x5Z!e2fvI4t}N$RNZKrH zL6Qg~AUHo?tU6!o!6HDgPar}tVO)~k8Xf;;^YPXf5kqBFH*20B0<?s)?HdvfH&^R& zMY_`pJ=$R@l>oNn;h<4N-g=oyU<src9}(^CaF2wc%ztkweWruckpI1hR}igCwI!Oi z#}m=nysR=eS9mYI1EH8Dq2POrOHARcIqE%=P+v=`Brmr2DL2%4zqs`MaHDkULdTeP z|E}j2+r{cz0OFSCS4n=5hZSn38yAfYtE?8yM%a<X+jxR4*3JGa)+3iCQD_L*{O>>s zcSu4)T-P!ll%1V6YP>7k9v>f{FprN#H}OZ+mN;az!@cP<bATt#Wnu(3vMPtz1OjJ( z<mM=)sq9nd>sMKu*4)0imtN)B*-8cJ>eW^nzYsF)^`0Uz4B>4ugZ-DHZfUp7#!6Ho z^|avzAFYPJLlyha9KdNTk@rwpT9fYEdgLo-v$)vIwE}L|fY`dUW=^6&*?nI!3UkUU z;>+dAsJYjOYYw_U3h8H@-U)%p4U$8@*u1H3QOg(|q&?(rl?GT{8&1<9Bpth>ghNG0 z@;Fcr@I^fe?i3CwS2pd_$V|_$Dnz)gLuD3=jVhX*FGzYxB;w*ikU2m-`R?)sBA_*Y zjZJsZI&L`LH*GxzdM(*GKI+pr<WP}l2?G(uu?fa<O1hyhaiA!NNL)#6vuF=IUHA{w zDlU|Q^VT{Ab)qldmgN3AZDSbjP=7)@{cr)8BAIGtC>ArkCqumMoZ!bO7GS0s6s`8e zrHJE>_gqd6j8!X(cAAM{4SAl<gD|_7g~}+E`OdgB_|0M&V&%{rFw;X!;^eep(54E| z;(qm;Y9nA<d*npDfyYdR6h2WeZ^_xQ#4F99e*oeh0>$w`toRsx>vDU!Rf!;_RiIIm zds!O=J$vG3dsR4X;z6TN_Y)Hh)RT`SX}gV8Ib))vIUL_wrSNE}OO>nw1o>r{=M~hJ zbjOzM542@kM=%94t2T>wLXUsA4kztQa*pU9K<t#Y=Kg$4LdI)u7|xl)DO`vnYJ?V) z&D(x;Z|h)jl>ImBn1&csdF8VILDqh{b>)BMu~h`#v6#i}>RGSj9{|jg1s6)i|3T>x zFwjtl@Gvm&;8OYjhtgruFpbICoUte<#gtWz{)eQKvap+gq4YT_4p+AjAdW<Giir4k zbyKIrpSw5z!_%Q4z<ByUz-Im{!v`eEquzT<!rWz{^mrsm$;<@L2ihfMNy<Xp`byE_ z&b~eO2Um%bw%nT(|B#VC;*gEbuV==N(a!A<)CZ!4i}0>?#5Z)L+|H$7+k}wk>Lm@v zw-$s(5N`My?q>nrCzjO%XA_HO^n8u$-pYDQZaBo-kX7SBKUIrx-B85FYPISH4#?|L z&E<jMk{VmEs)TmWE6Yzq74@oWc4XF1{jric!XDkuXWEm_SHb#Gm)Sk0T$)_)oWxQX zlq#YQ0I&cy03X=d_XgOL@N{m*S>EyCzqpG3=(X<ev~7Q;m6IhECgBk&;%OO$-XjJE z_!e~!{<)weZ11_pwnsulLT9iET~G;rwHN*#y1i_n%t~1K7nPY+lh197u(I_vo`>Z& zU&5~?camteO8K|N*`eYH?!GX=<clXZX=tbFIEyDs{!5}x$-+DgN#`33-8i%|j)-R( z5A|wvV`r}{%Rc~X3(1sLdbsQkZ8j+5VBt$$6MLDNW2bktKi^5e77K+nDqGv|jW&sh zv+`+jzYZDiI+6*sC5^!Qi+Xso6%!)~9Sa`Hk@#%<yAuaxe@pfA>}AI2oJcT>%$iUV zPf6-T2af6F6$g#_VF?t=FCkm!H)O`mPFK2A6!y?TPq<b`8wOcw%GpYNWc)281s|z{ zz517K;qcnb_pJ$fS@zs-^$!tBmU8iDSZVAhb#I*sv$z-e-nomSxsIu_uIv+J6TDM~ zR!_FB)?WwWCWYwZV|k<NFJQV&pW0@9&!G<zSQi7?`F|(q$SiauVoS*igfY~d7hQQ! zT=14+S;x7T9n{6C9gLjRRmX-sl%*uQZlqbrGqQ#%vNb4jSNV%Q*m&b*uQak!Me$PR zP(Jyl?f1Dx9+Em9Y$VJgsaRty@_fbnC=Du<s$saK$l20})|ysdjx6IW*0s&fs0Hly znU8SZozct{D!B-t`ClmB-IWcy@Mu^mL&jvGU{e)djI<_&6G_4+@_|IRMX`Tn(3Oo* z?f_`7xXzo#5c;~zvK-jFsU`0&IjojD80IowtxtrTT;HT8HvCf?it7|1cnGG?tPj0) zW9m&GKaFD}pv%7}_U=QwP9X-R>HH36hPy-o1O&g5@NopHmHs6@pZl)cdD4dUrFC6c zT|iR*FUFWPt{0=JNeS1+wCLVHz@Iw@X6krEuS{(-J36LY+gq;WJ6Wd9F}nG%2W)Aw z<ph#+7kYPiPH5A9PRmcV^xvNCHZZxdiAXRhQ$Cz*tQs)dif|Or=%b<A$Ev44^rR5i z54`IAX4VvQOv5}nA6;adDzO(SB1?ZvuRnS<1h;kr$@-i0eayr4yM*3-Q0<*N<_S~d z+0S`6dtk#LX+ooWFCm)@W-7+YHtC4zF<w=L_?YkbEA=k2hn5;0^974T1`)=mPNy1g z>TlwO>@B<RG&^){)z)0QqBhF->Q6Ovkf5amWH+4|Mxt(saDL1Q*mtreJ<X|#?!m*h zytlM2on2`BcC@du(l)P4$~<FDTbF`bQi=`DWgTwnURk;5?WZqW@GV$PD9W*2<il@S zN}NHN)C}@@FB$=Ck1kH74)i$_NYfFrwfJ@Ab>eiAjr8<PiMM`~rYht=rf8gJ4~7-W z9&rucdc|K0wZ|@nt;w4#r&aFPa5+%iQ>i?(B~T>kgU&V2WS8y-pCg0><PQfgZ%3=Y zG>IU}_A4dGt$kw%C3NEb_=z8!*KAy*OAxdEvn7THCjL<n3;E!UzG<_{BBD_vd}*1I ztI)aQQ?%26m9t1|lk+lfs>0yXB6ELU`9m!0;3ew`SxCH0hl%mP(O<NmOJL+YlheOe z&rbYAqNgh3+K_BvF)hx9@#4FgvxiV)PL=O(h1}b(K_yojsht7^7m>0DKwg1X6!$V+ zZC&v)!p$Pqn9%0tUtCgiGwioV`?_U_-aSL_Fa}x%;HVw_6pNP5sMzFn$(#0!k?&JH z_>C8OVoL{%pi=y|0|DsY0y@G+Jkj;bd8_HOzkpqnK=8z(V(~J`ZRtt2VM9HlV!t9Y z=kti)>x=cqj<-AYs2ZPSfjDaQ(81Bg<R9_Rl{Bks_(l8K{l`U>9{hEw?^7}b$X1zm zcscC$o<k1#_mrbMy44;d4Ft_RiuI+`?|OzcanjttiP~))ltQDYI>TPFSc~rzcDV0Z z+z1N~V>!zWpsxp^QOu<<WU(($%7UXk%a_|4T^~IQrHKZnqnEeElIqIXY5?$3APN9s zkU(#>Q6B$-6S3GW5mrjISP2r9&bnFiJJ(d=04$IV{SNq0X-nYN(h@6;fkYP#Q2(qB z{Jiv#!MiM``r45YvL6|HjeGP^`Y44;EXL$cE8V?8wCmbg<h{d}^EGI}V&ojm!F+Lb zu3n7sj`%Fy;}5T;UE<Jq`dW#8BM4RZ)qKbG#_VKa?dNt<^WqazB_?j4Gx*&D>7kVI zs%Be_kW0bhy(&R7LA6^>*w|#_PFekUGYX((A~sB1)3PQC1}=qVQajxhr}G-qwxrKK z^yY*w^*Ic`_@xPqj?S8bt0#xDB((WqniO1gVGM>B!uc1g+9MEXp=*XZb^^Cu2_VOd zWwF_l$m8%iamGF7%^3oZ-O$gbLiu{u3{ypmgifiF*H2EPu5tkMG=HNacGs7pDWafv z=+2tTiR}3N)7~Mtj*QNH|2yO)h_bE~k%KuwLlS!D<(gw2q<c=pADuW5S(c2GCaor+ zIz8!B0mP84wrp98c?@iXNSg^;+<HLD8WYA5-dZg75F6<OsZb3B?{Cx*xDe;a@uKW3 z-;q?llehX>Ssv<rT64BH^TW!olWK|Q67hsYl${=rS98WV;$TMTc_ro01eS_#ny$6_ zdCBRXv6fwz?vN1TC^1Du)+~q@NW*rjZ44i32K+f^+677N`Mqk4{(neT(NbW8+X$l# zq1Sxv#~V~)<)Y}@6v~vf>b616)WXfhC~FF#btiMnugd9VC@6ZS%u;#>l=pa)58b>S zI)BcX*iIx*As)*VO*?+7dZM^DS(~2gbmBJ@J{tZ%AC#IF?)H(K8M(5p0%p8v8@W}m znitr%{*FXLRdXBSq~r3KKq(?|CefOqN4+sj{oik3Q<R9N!5_r2pA|2$M;(T>_5&sp zMQbheF5d>d$DKr9^VE;Z-Nfu=DU#=926F_o;|v~EZycIdotbtyV%Zv)F@Ct}MCkuX zyD+tyUX?|=8VG{#JK~-_l`f{XcJppJrA~$*(?E&H%!<qJu=3VOU!CG*WFUvjX>8lN z<(_t(eB$iP+4&Qkc{4pz*aOzXaDDU_hf~UCG(`)tDY|Stz1Mc!c|Li0ia#!tS7!6= z-=-z}bRYB54A>um$~bF!ZEopPWp*c>=%e_Fd{hOo`KZ=zA$e^15H>O#&XFxNEM111 z+Azm_kP?KkC-^zEUi%oeZo1P|xwh7V8_6OaU)`MMQ#Y&6beW-VfP5x%Pa)jEo6Byv z`V@Fr{E4YsPNhMUcY(y=Ct3<x%bAmxVs9qF$eAu^Hkdz4d$mZnd*c3{MNX|~rvxbc z#aUq0mC!x+0B_mWx==uTnS)2nDaHdAA$jKS;9e8hII+_h>RkG5rMX+OpZlEWx%N;K zzvy=t+|S(uiYJtk{FX3P4q7zfGuMSo3FQg^R1o$@DD%sha4`R^Ew-z-@WCbpGliMJ z#Hj14K<8R@6TN3@WU|YT&Ym$J1O{0F+5Fq1Gn%u3NYdFP><CDR(lkR)>%k$nQmcx~ zbwTNi0FKPyC(haHnq>-0T-5k%)Ko}%3a2gpp2jQTiHY~GrCq_4pfq^gxEuTPQPjGn zeCu5NH8rTH)zP=%Gx-Er#fgW*$7QoO-lCXn0u#?Jh#E(+SC^zA=NqxyC?$I=>yolG zJS_X}QTxW;@KYV)Qs`IzLDr4685|~~M01GYn_T8i9oY0LCD<e<2L^Id@m3>u<$)!r z6xYg_lt?mfp@I~hkebcD@I}5UQXMGq45%iU^9(_M?91spdHgRXSP;pwy#V!ND<+iO z5_98Sh7l(Up0_VImHOn!ky2W(x5NyArKxtJbv*SizJgm(vDy1xwd^W3;L!yhU7rcg zfk5l;@$5nlcdNT#*(KI_g#Eg7{@vZNh7Ty?5jpa*&@!1?m;g*<=Z;RsGvNJVB4L6{ zT+j{S{b^vh%R!PEPpC+**)S3zkmp8iAF!XKyb&1ir@B;_2RZ!hX(3ax=THIBu0*=s zP9K!ofAcp2D!7_o?GF<(!_^P;qCiAVqY~s*s#kv-ho$Go$9Y-UBw~r=*8~^uxOWQd zBAt319W#Z{cG)q%mmpiMb^>~K^7oY>l@IHuri64sMV+2HFb$NK`kKnpdspLCJ;sK6 zoNHCC4}Jd>Md;64n2pcJJxB%#C+*g5bW`r(%m<<Q&yJRnLMox`-bi^Zy8*{YfY>F` z`W-mkZg4jOU37tE$G5uKs@DlarHv9Qu<iltu^LlsNQW^y{P^U$tV7<!;bH-C6bs&z zgb*cnywTM25IT22!RwpMz|iWXRRAxch@g#(R+xn<3fyjY@(CLc#B(?lwttD-9z24* z&j27a_*g$JL1sCBf#dHlPTe~HF@bNYxP6io_TsUx;sVHqLRo1cB8hhA=XAlX0Bh2q z3G$GUAWr&N_8m8ZFt*j0bbh*v$Ov9kHi4jH?ODqIwZ2+x{55PB-WFEz6KUWDAw{E& z4Wte$;ru@Lp#W_f#C^3p`Q&BYfLgS<@_zA<kow~3B@JBU%$y9J@HbL>wV&4$^DHM2 zPeBRK>zZeB*G11b2vNcpvRdb#c_`1L86RZZ37tgOtbY9mKnSEY*7(>#_%jg7l;EJm z75i*?iC5g&#sJzAI0kTuY!3MQkt-Q};-d{<Vy)xxH^z%q2~eUIN!+4P6;b*+Ny-5` zb=P#k1s3x7%5L%SKKLlH10qO<AVO62ter4;OiT4qDowlt%G?WIepp^trO^`h04fyy zrYoC1vI^jLBGtxWW-|EX_+lxXopX^Z8GotX_WK+Q)osna`3$M)yRKYK&H^d=5zPp9 z6iFp1@S?<kG@8kYh74+Sx!>#&b+@Vy_wf@lnlM2ls+>9r&4*tqXT1Tnq?Zf5mdeth zvM!I=1K9%S7O&*z)qy8!o>rc3C%@L+V2#pxPutqmSG|<Z)Z5$IkeN@+Pb}(|mE$1I zb*&9ax@+9(aOnGYNx!fEwf?DyNH_yKwi1<`Rx@bGF8^oTMVo)>N8&%g5y>@{gI3z8 z=-|VnimKWT5VoOtcl>lN&g}zMNN32af!vi6Y!PuN83`4|K@o@Mqz+jSt4MK-m_`^( z-i7_BF&LuEEllF*p=tgUYZ^3KW|5RT?3|;E_vx1O73<)EjwV@__iOBJg^PevDhvPu zER!nYGa%s?I<wm^fuXd)1|aZ27!a+0E*C#7A!B86Q!59|-D5f&+aA$!rWjCdm?pnU zpBIO7C$-W{363k|>PXrjPpS|7D1rZD{>L-v4y#e(CdVY2Rh31Qbg6!=n#V?Uvn1D^ z`pISPxte81*Nkn~2frH?SKkM+C>z98g^)l7a@8r)NFKAS5_jjLW$mBE6;GP5>o6&4 z&e5Wliq|SKOCoUA_#T3q!C8+Q>2LW?QxAZY<pHQY;_DRcz$S}-oe}8;pyr(2RQIQ( zB{)B-kkbl0DtT;H^l&<k9BzCDOrlcH_@NqIZd2xnO7Gb&{P4H940$MyS07#HF&<J% zs*Dr-5SE3%Hv^-*`Bf}Gkw;uLt@ye9p)=hVe$%aA{F(_R<sYTba{N2oeDxl^4vs^y zZRUFwg`-vo_WTJ-1r-@jWf|?bVDC?2C4i$L>2!bL&?GhzLl)E#*hgf<U5xtDZ;`*o z7{K%=`{Uf}UKBDGg#sy%pFF+l<VmK*6C7s+l%wHN3LGD^KgK-vmiZ~o$8L`k`05wz z)4qrle?cGZ{Qer<`G@-Y=vz3o@kqtz%&F9oHsYwJ)d3ohud7N=6sFzyFN*LZBC8>S zCSEU@EuMz&RQvSKvBc-S)pxo#<(HUq1pE?TTzlQHVPbvJnMt%0a31INtWRAUahPWv z#OMwul_~8hf51RUx!4dO|GM-rZzbs6tAFFm<%=HE`Rg$lVOFalxI(%d=1S*gzctY5 z4|(H2t|&QdD>%RYEk)vxh=5K~vQh_L6OnvJE|&u=(;d%mk19xoDs+Yo4>sE49{o*= zM?F8b|Ag`eUqkGK&*cOKGmJtv0~Qq-Zhp}9i(qf5wn4|n8=6znU~nQ71`$m;JG}-- zcOU+-+HoLGthDE1qtNT{x%A3qCQ}i`oS=u6fNmrfQEP8rO*}LalaS4UD!&taV*`^x zd0C%4j}PC`M2C52+hf26N|(;>Z(v8aC9kJ=l&oJq>d~iLmp8x=O^R}1ZX(zAT>Zt% zOl_8HnYk+M2W%zgqd<{NhpCZBQ#YfzR37{MPLp)Q`HRC8bBAwmx1`5OL$;gqzqLqM zq_&cP%f{~!J`!;hS#)vtPi*Oqb#6pL!CjpNk^(&Og~gO}QJ9Mk#0Jvc;<yRcASfKf z>{SZ9A-z-os>Qj9CUNClOCVBCE;BP-$R+9Y1l?T{PeN6*y$d^5^p^JaOJaXpnxyEP zG`77x0f(89bJ7Pkw%}jB-m4zhZ=M)D#?oY}lB->KNvpDd?1x4B`eLEB6uho>^Pif8 z?}&Ru6`FpdzP9kcCs4e^ly7Zpoxah!Oixit1T~~gV)j+MeQP%(*Y*Ch1f=V)CGXAQ zNGBZ0TZjg*=?xub=PU2Oo#)>7yqC=&#{3faX_s*Lz30qG{i7UZu5#i<b13Q1L`3pV zfCWaLo@%M4m|{b9J(PR-M4()C9!4FZ5+ew92SBvP!IFQU;UnP!OrP~{M&sQA=J~vM zf_Xp>an|jfV*KlF84xEaZRuxqeOR&bS_Y}7gaZ_x=AWr+R`9DJ*$Aye!@fw)H4*0* zw!k_l{nCto0O#uw%_QKCY-Ji*ZLO)~QDVs8M|G@5QbFw6dIBcFk!v&Ao40@VHZbO$ z^PN9!jr?6Ji}cJoJBD?Pn(_lkCklin43&4qktMKg8@aoDR_oFGjM%yHmn@1yZ0is1 z{IfBx-|D9_>kseiEnd6E7p<+L@5M4&8>a9ua}t1x`fU5G8T*Ov6Ejo(`ejFGfJC&% e`L7|u@4vaT&l+`u5r3?ft?t1b!ab;etN#xJ50H!i diff --git a/assets/images/shiva.thumb.jpg b/assets/images/shiva.thumb.jpg deleted file mode 100644 index 4fdeaf017ea6e515d358d145f26cc5d7818fe6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4657 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 diff --git a/assets/images/shiva.thumb.webp b/assets/images/shiva.thumb.webp deleted file mode 100644 index 6ab462f55ce482af0dd1b4df2d808aa069f7561a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2372 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 diff --git a/assets/images/shiva.webp b/assets/images/shiva.webp deleted file mode 100644 index eff71db644aa424cd5c577890c7b0801a0df247d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16246 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 diff --git a/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email.html b/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email.html index 90bd1be90..ab027700b 100644 --- a/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email.html +++ b/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,18 +25,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in How to Send a Notification from a LAMMPS Simulation to Your Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2014/07/04/Creating-an-array-of-SJR-widget-for-visual-comparison-of-journal-ranks.html b/blog/2014/07/04/Creating-an-array-of-SJR-widget-for-visual-comparison-of-journal-ranks.html index 6ebcd9530..687d8af76 100644 --- a/blog/2014/07/04/Creating-an-array-of-SJR-widget-for-visual-comparison-of-journal-ranks.html +++ b/blog/2014/07/04/Creating-an-array-of-SJR-widget-for-visual-comparison-of-journal-ranks.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,18 +21,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Creating an array of SJR widget for visual comparison of journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables.html b/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables.html index e41a3a318..6ba92de49 100644 --- a/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables.html +++ b/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -49,18 +49,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2014/08/22/My-new-conference-paper-is-now-available-online.html b/blog/2014/08/22/My-new-conference-paper-is-now-available-online.html index b64b710c2..8bb0eb95e 100644 --- a/blog/2014/08/22/My-new-conference-paper-is-now-available-online.html +++ b/blog/2014/08/22/My-new-conference-paper-is-now-available-online.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,18 +25,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in My APEA conference paper is now available on Scientific.Net" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2014/09/12/My-trip-of-AEPA-2014-conference.html b/blog/2014/09/12/My-trip-of-AEPA-2014-conference.html index 033a66348..646b65082 100644 --- a/blog/2014/09/12/My-trip-of-AEPA-2014-conference.html +++ b/blog/2014/09/12/My-trip-of-AEPA-2014-conference.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,18 +21,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in My conference trip for AEPA 2014" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2014/10/05/An-Inspiring-TED-video-talking-about-how-we-should-rethink-about-the-unknown-in-the-postgraduate-or-research-study.html b/blog/2014/10/05/An-Inspiring-TED-video-talking-about-how-we-should-rethink-about-the-unknown-in-the-postgraduate-or-research-study.html index 798f0c929..778c02b5f 100644 --- a/blog/2014/10/05/An-Inspiring-TED-video-talking-about-how-we-should-rethink-about-the-unknown-in-the-postgraduate-or-research-study.html +++ b/blog/2014/10/05/An-Inspiring-TED-video-talking-about-how-we-should-rethink-about-the-unknown-in-the-postgraduate-or-research-study.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -13,7 +13,7 @@ </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <h1 class="posttitle">An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study</h1> </div> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2014-10-05T00:00:00+08:00" itemprop="datePublished" title="Published on">05 Oct 2014</time></div> </small> </p> <div class="article-post"><p>Prof. Uri Alon gave an inspiring talk in TED. He pointed out what most PhD students face in their postgraduate studies. We traditionally think science should be objective and rational. There should be a straight forward path going from questions to answers. But Aion this is rarely the situation in real life. He and he found many colleagues and his students feel depression and frustration because many times the things can go wrong. For example, experiments generate unexpected results. Then, the research becomes to get away from the path and go into messy and unknown status, that he called a cloud.</p> <p>However, Aion advocates that is an amazing part of science. When you accept the unknown and search the path in the cloud. You may eventually go through the boundary of the unknown and come up with a different answer, which is usually more interesting than the answer that expected in the original path. This comes up that we should overcome our fear of the unknown, and go forward to embrace it.</p> -<amp-youtube id="yt-F1U26PLiXjM" width="480" height="270" layout="responsive" data-videoid="F1U26PLiXjM" title="Uri Alon: Why truly innovative science demands a leap into the unknown" data-vars-video-title="Uri Alon: Why truly innovative science demands a leap into the unknown" data-vars-video-url="https://www.youtube.com/watch?v=F1U26PLiXjM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=F1U26PLiXjM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +<amp-youtube id="yt-F1U26PLiXjM" width="480" height="270" layout="responsive" credentials="omit" data-videoid="F1U26PLiXjM" title="Uri Alon: Why truly innovative science demands a leap into the unknown" data-vars-video-title="Uri Alon: Why truly innovative science demands a leap into the unknown" data-vars-video-url="https://www.youtube.com/watch?v=F1U26PLiXjM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=F1U26PLiXjM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <hr> <p><strong>Related</strong>: <a href="/blog/2014/07/04/Creating-an-array-of-SJR-widget-for-visual-comparison-of-journal-ranks">Creating an array of SJR widget for visual comparison of journal ranks</a></p> <div class="clearfix"></div> </div> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/how-to-research/">How to research</a></small> </li><li> <small><a href="/tag/ted/">TED</a></small> </li></ul> </div> <div class="row PageNavigation mt-4 prevnextlinks"><div class="col-md-6 rightborder pl-0"> <a class="thepostlink" href="/blog/2014/09/12/My-trip-of-AEPA-2014-conference">« My conference trip for AEPA 2014</a> </div><div class="col-md-6 text-right pr-0"> <a class="thepostlink" href="/blog/matlab/file-io-and-file-system-in-matlab">File I/O and File System in MATLAB »</a> </div></div> <div class="row post-top-meta"> <div class="col-md-2"> <amp-img class="author-thumb i-amphtml-layout-fixed i-amphtml-layout-size-defined" width="72" height="72" src="https://www.gravatar.com/avatar/abd876486b2caa54b43bf64a5a86f620?s=250&d=mm&r=x" alt="Chris F." style="width:72px;height:72px;" i-amphtml-layout="fixed"></amp-img> </div> <div class="col-md-10"> <a class="link-dark" href="https://en.gravatar.com/chrisfungky" rel="noopener" target="_blank">Chris F.</a><a href="https://www.facebook.com/chriskyfung/" class="btn follow" rel="noopener" target="_blank">Follow</a> <span class="author-description">Author of this blog, M.Phil.</span> </div> </div> <section> <div id="comments"><div class="disqus"> <amp-iframe width="600" height="580" layout="responsive" data-block-on-consent-purposes="functional" sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-forms" resizable src="https://chriskyfung.gitlab.io/disqus-amp/?url=https://chriskyfung.github.io/blog/2014/10/05/An-Inspiring-TED-video-talking-about-how-we-should-rethink-about-the-unknown-in-the-postgraduate-or-research-study&title='An+Inspiring+TED+video+talking+about+how+we+should+rethink+about+the+unknown+in+the+postgraduate+or+research+study'" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:96.6667%"></i-amphtml-sizer> <div overflow style="background-color: #0003;display: block;position: relative;"> <button class="btn btn-dark" aria-label="Load more comments" tabindex="0" style="margin: .5em 50%; transform: translateX(-50%);"> Load more </button> </div> <div placeholder>Loading Disqus Comments...</div> <div fallback> Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a> </div> </amp-iframe> </div></div> </section> </div> <div class="col-md-4 col-lg-4 right-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> @@ -23,18 +23,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in An Inspiring TED video talking about how we should rethink about the unknown in the postgraduate or research study" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='F1U26PLiXjM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released.html b/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released.html index d99417a72..6f569eeb8 100644 --- a/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released.html +++ b/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,18 +21,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in OVITO - The Open Visualization Tool - Version 2.6.1 - has been released" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2015/11/27/template-OVITO-python-modifier.html b/blog/2015/11/27/template-OVITO-python-modifier.html index e2571de8f..a5304b910 100644 --- a/blog/2015/11/27/template-OVITO-python-modifier.html +++ b/blog/2015/11/27/template-OVITO-python-modifier.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -49,18 +49,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in [template] OVITO python modifier" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2016/01/18/Installation-of-Andriod-Studio.html b/blog/2016/01/18/Installation-of-Andriod-Studio.html index 862d39145..0b2e6777a 100644 --- a/blog/2016/01/18/Installation-of-Andriod-Studio.html +++ b/blog/2016/01/18/Installation-of-Andriod-Studio.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,18 +25,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Installation of Android Studio and SDK Tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2017/02/26/new-site-is-opened.html b/blog/2017/02/26/new-site-is-opened.html index 53785afb5..2125d1b40 100644 --- a/blog/2017/02/26/new-site-is-opened.html +++ b/blog/2017/02/26/new-site-is-opened.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,18 +21,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Launches Site with GitHub Pages" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2019/10/22/Follow-Me-on-Medium.html b/blog/2019/10/22/Follow-Me-on-Medium.html index 90db0787f..0632f84ce 100644 --- a/blog/2019/10/22/Follow-Me-on-Medium.html +++ b/blog/2019/10/22/Follow-Me-on-Medium.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,18 +21,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Follow Me on Medium !" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/2020/06/01/enjoy-our-new-theme.html b/blog/2020/06/01/enjoy-our-new-theme.html old mode 100755 new mode 100644 index 8953fe688..455c43cd1 --- a/blog/2020/06/01/enjoy-our-new-theme.html +++ b/blog/2020/06/01/enjoy-our-new-theme.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -22,18 +22,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Launch new theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/amp-now.html b/blog/amp-now.html index 2cacfbe71..6a2b45e4a 100644 --- a/blog/amp-now.html +++ b/blog/amp-now.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -22,18 +22,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in AMP Now ⚡" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/comp-sci/fuzzy-logic.html b/blog/comp-sci/fuzzy-logic.html index 46f0e816d..14e1eb7f8 100644 --- a/blog/comp-sci/fuzzy-logic.html +++ b/blog/comp-sci/fuzzy-logic.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -15,7 +15,7 @@ </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li><li> <small><a href="/category/computer-science/">Computer Science</a></small> </li></ul> </div> <h1 class="posttitle">Short Notes on Fuzzy Logic</h1> </div> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-06-10T08:36:00+08:00" itemprop="datePublished" title="Published on">10 Jun 2015</time></div> </small> </p> <div class="article-post"><aside style="position: relative;"> <a href="#toc-skipped" class="screen-reader-only">Skip table of contents</a> </aside> <h2 class="no_toc" id="table-of-contents">Table of Contents</h2> <ul id="markdown-toc"> <li><a href="#what-is-fuzzy-logic" id="markdown-toc-what-is-fuzzy-logic">What is Fuzzy Logic</a></li> <li><a href="#fuzzy-inference-systems-fis" id="markdown-toc-fuzzy-inference-systems-fis">Fuzzy Inference Systems (FIS)</a> <ul> <li><a href="#mamdani-type-and-takagi-sugeno-kang-tsk-type-fis" id="markdown-toc-mamdani-type-and-takagi-sugeno-kang-tsk-type-fis">Mamdani-Type and Takagi-Sugeno-Kang (TSK)-Type FIS</a> <ul> <li><a href="#mamdani-type-fis" id="markdown-toc-mamdani-type-fis">Mamdani-type FIS</a></li> <li><a href="#tsk-type-fis" id="markdown-toc-tsk-type-fis">TSK-type FIS</a></li> </ul> </li> <li><a href="#principal-design-parameters-for-fis" id="markdown-toc-principal-design-parameters-for-fis">Principal Design Parameters For FIS</a></li> <li><a href="#adaptive-fuzzy-systems" id="markdown-toc-adaptive-fuzzy-systems">Adaptive Fuzzy Systems</a></li> </ul> </li> <li><a href="#fuzzy-logic-applications" id="markdown-toc-fuzzy-logic-applications">Fuzzy Logic applications</a> <ul> <li><a href="#fuzzy-logic-controller-flc--control-systems" id="markdown-toc-fuzzy-logic-controller-flc--control-systems">Fuzzy Logic controller (FLC) / control systems</a></li> </ul> </li> <li><a href="#fuzzy-logic-in-python" id="markdown-toc-fuzzy-logic-in-python">Fuzzy Logic in Python</a></li> <li><a href="#references" id="markdown-toc-references">References</a></li> </ul> <aside id="toc-skipped"></aside> <h2 id="what-is-fuzzy-logic">What is Fuzzy Logic<a class="anchor-link" href="#what-is-fuzzy-logic"><i class="fas fa-link"></i></a></h2> <p><i class="far fa-play-circle"></i> <strong>Suggested Video</strong></p> -<amp-youtube id="yt-rln_kZbYaWc" width="480" height="270" layout="responsive" data-videoid="rln_kZbYaWc" title="An Introduction to Fuzzy Logic" data-vars-video-title="An Introduction to Fuzzy Logic" data-vars-video-url="https://www.youtube.com/watch?v=rln_kZbYaWc" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=rln_kZbYaWc" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +<amp-youtube id="yt-rln_kZbYaWc" width="480" height="270" layout="responsive" credentials="omit" data-videoid="rln_kZbYaWc" title="An Introduction to Fuzzy Logic" data-vars-video-title="An Introduction to Fuzzy Logic" data-vars-video-url="https://www.youtube.com/watch?v=rln_kZbYaWc" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=rln_kZbYaWc" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <h2 id="fuzzy-inference-systems-fis">Fuzzy Inference Systems (FIS)<a class="anchor-link" href="#fuzzy-inference-systems-fis"><i class="fas fa-link"></i></a></h2> <h3 id="mamdani-type-and-takagi-sugeno-kang-tsk-type-fis">Mamdani-Type and Takagi-Sugeno-Kang (TSK)-Type FIS<a class="anchor-link" href="#mamdani-type-and-takagi-sugeno-kang-tsk-type-fis"><i class="fas fa-link"></i></a></h3> <p>There are mainly two types of fuzzy inference systems, namely,</p> <ul> <li>Mamdani-type <a class="citation" href="#mamdani_experiment_1975">[1], [2]</a> <ul> <li>fuzzy consequents (also being called type-I)</li> <li>Singleton consequents (also being called type-II)</li> </ul> </li> <li>TSK-type (also being called type-III) <a class="citation" href="#tanaka_stability_1992">[3]</a></li> </ul> <h4 id="mamdani-type-fis">Mamdani-type FIS<a class="anchor-link" href="#mamdani-type-fis"><i class="fas fa-link"></i></a></h4> <p>Characteristics:</p> <ul> <li>A model-free approach</li> <li>Mainly based on human skills and experience (, or expert/prior knowledge)</li> <li>Possibly achieve the performance with generally satisfactory</li> </ul> <p>Shortages:</p> <ul> <li>Lack of systematic approaches for the design of control systems</li> <li>Cannot guarantee the stability, controllability, parametric sensitivity and robustness <a class="citation" href="#sugeno_stability_1999">[4], [5]</a></li> @@ -27,7 +27,7 @@ </blockquote> <p>Lee <a class="citation" href="#lee_fuzzy_1990">[6]</a> gave an overview of fuzzy logic controllers by 1990. The review paper summarized the concept and the structure of fuzzy logic controllers. It also provided a survey of the methods of fuzzifying membership functions, defining the rule base, and justification of fuzzy control rules.</p> <p>Some Mamdani-type FLC are listed below <a class="citation" href="#precup_survey_2011">[5]</a>:</p> <ul> <li>Control of machining processes</li> <li>Laser tracking systems</li> <li>Plastic injection molding</li> <li>Vibration suppression</li> <li>Manufacturing area related to robotics, such as manipulators and mobile robots</li> </ul> <p>Other FLC:</p> <ul> <li>Fuzzy Statistical Process Control <a class="citation" href="#ross_fuzzy_2004">[7]</a></li> </ul> <h2 id="fuzzy-logic-in-python">Fuzzy Logic in Python<a class="anchor-link" href="#fuzzy-logic-in-python"><i class="fas fa-link"></i></a></h2> <p><i class="far fa-play-circle"></i> <strong>Suggested Video</strong></p> -<amp-youtube id="yt-qUQf1JxnTnY" width="480" height="270" layout="responsive" data-videoid="qUQf1JxnTnY" title="Scikit-Fuzzy: A New SciPy Toolkit for Fuzzy Logic; SciPy 2013 Presentation" data-vars-video-title="Scikit-Fuzzy: A New SciPy Toolkit for Fuzzy Logic; SciPy 2013 Presentation" data-vars-video-url="https://www.youtube.com/watch?v=qUQf1JxnTnY" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=qUQf1JxnTnY" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +<amp-youtube id="yt-qUQf1JxnTnY" width="480" height="270" layout="responsive" credentials="omit" data-videoid="qUQf1JxnTnY" title="Scikit-Fuzzy: A New SciPy Toolkit for Fuzzy Logic; SciPy 2013 Presentation" data-vars-video-title="Scikit-Fuzzy: A New SciPy Toolkit for Fuzzy Logic; SciPy 2013 Presentation" data-vars-video-url="https://www.youtube.com/watch?v=qUQf1JxnTnY" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=qUQf1JxnTnY" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <h2 id="references">References<a class="anchor-link" href="#references"><i class="fas fa-link"></i></a></h2> <ol class="bibliography"><li><span id="mamdani_experiment_1975">E. H. Mamdani and S. Assilian, “Experiment in Linguistic Synthesis with a Fuzzy Logic Controller,” <i>International Journal of Man-Machine Studies</i>, vol. 7, no. 1, pp. 1–13, 1975,</span> doi: <a data-vars-event-label="https://doi.org/10.1016/S0020-7373(75)80002-2" href="https://doi.org/10.1016/S0020-7373(75)80002-2">10.1016/S0020-7373(75)80002-2</a>.</li> <li><span id="mamdani_advances_1976">E. H. Mamdani, “Advances in Linguistic-Synthesis of Fuzzy Controllers,” <i>International Journal of Man-Machine Studies</i>, vol. 8, no. 6, pp. 669–678, 1976,</span> doi: <a data-vars-event-label="https://doi.org/10.1016/S0020-7373(76)80028-4" href="https://doi.org/10.1016/S0020-7373(76)80028-4">10.1016/S0020-7373(76)80028-4</a>.</li> <li><span id="tanaka_stability_1992">K. Tanaka and M. Sugeno, “Stability analysis and design of fuzzy control systems,” <i>Fuzzy Sets and Systems</i>, vol. 45, no. 2, pp. 135–156, Jan. 1992,</span> doi: <a data-vars-event-label="https://doi.org/10.1016/0165-0114(92)90113-I" href="https://doi.org/10.1016/0165-0114(92)90113-I">10.1016/0165-0114(92)90113-I</a>.</li> @@ -43,18 +43,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Short Notes on Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='rln_kZbYaWc']","amp-youtube[data-videoid='qUQf1JxnTnY']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/index.html b/blog/index.html index c0fc53189..ee98305d8 100644 --- a/blog/index.html +++ b/blog/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,8 +23,9 @@ </div> </div> </section> <section class="recent-posts row"> <div class="col-sm-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.webp" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.jpg" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" rel="bookmark">Qwiklabs Lab Completion Tracker - Version History</a></h3> <p class="card-text">The changelog, the feature highlights, and the screenshots of the previous versions of the "Qwiklabs Lab Completion Tracker".</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/userscript/">Userscript</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.webp" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.jpg" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" rel="bookmark">Qwiklabs Lab Completion Tracker - Version History</a></h3> <p class="card-text">The changelog, the feature highlights, and the screenshots of the previous versions of the "Qwiklabs Lab Completion Tracker".</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/userscript/">Userscript</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/matlab/matlab-packages-and-toolboxes" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/matlab/matlab-packages.webp" alt="thumbnail for My MATLAB Pa..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/matlab/matlab-packages.jpg" alt="thumbnail for My MATLAB Pa..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes" rel="bookmark">My MATLAB Package and Toolbox Picks</a></h3> <p class="card-text">A collection of useful MATLAB packages and toolboxes that support and improve your workflow, data visualization, code functionility and performance.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/matlab/">MATLAB</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> @@ -44,9 +45,7 @@ </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/build-and-manage-apis-with-apigee-challenge-lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="962" height="639" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp336-task3-apigee-live-portal.webp" alt="thumbnail for ☁ Build and ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjYzOSIgd2lkdGg9Ijk2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="962" height="639" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp336-task3-apigee-live-portal.jpg" alt="thumbnail for ☁ Build and ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjYzOSIgd2lkdGg9Ijk2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/build-and-manage-apis-with-apigee-challenge-lab" rel="bookmark">☁ Build and Manage APIs with Apigee: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP336 on Qwiklabs. You will practice the skills and knowledge in the Build and Manage APIs with Apigee.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/apigee/">Apigee</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-09-13T14:25:00+08:00" itemprop="datePublished" title="Published on">13 Sep 2020</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-manage-apis-with-apigee-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> -<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp323-cloud-dataprep.webp" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp323-cloud-dataprep.png" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" rel="bookmark">☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP323 on Qwiklabs. You will practice the skills and knowledge for running Dataflow, Dataproc, and Dataprep as well as Google Cloud...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/bigquery/">BigQuery</a></small> </li><li> <small><a href="/tag/cloud-ai/">Cloud AI</a></small> </li><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/machine-learning/">Machine Learning</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-25T10:18:00+08:00" itemprop="dateModified" title="Updated on">25 Jun 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> -</div> -</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><span class="page-number"> Page 1 of 5 </span><a class="older-posts" href="/blog/page2/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><span class="page-number"> Page 1 of 5 </span><a class="older-posts" href="/blog/page2/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/linux/Install-Chrome-Remote-Desktop-on-Kubuntu.html b/blog/linux/Install-Chrome-Remote-Desktop-on-Kubuntu.html index ec6e58215..d26aa5c34 100644 --- a/blog/linux/Install-Chrome-Remote-Desktop-on-Kubuntu.html +++ b/blog/linux/Install-Chrome-Remote-Desktop-on-Kubuntu.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -51,18 +51,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Install Chrome Remote Desktop on KDE desktop / Kubuntu 14.04 LTS or higher" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/linux/Useful-Ubuntu-Commands.html b/blog/linux/Useful-Ubuntu-Commands.html index 4967f6d84..1109e1b36 100644 --- a/blog/linux/Useful-Ubuntu-Commands.html +++ b/blog/linux/Useful-Ubuntu-Commands.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -42,18 +42,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Useful command lines in Ubuntu that help using terminals" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/matlab/Convert-MATLAB-Matrix-to-MS-Office-Equation.html b/blog/matlab/Convert-MATLAB-Matrix-to-MS-Office-Equation.html index 59c6dce83..7482a95d3 100644 --- a/blog/matlab/Convert-MATLAB-Matrix-to-MS-Office-Equation.html +++ b/blog/matlab/Convert-MATLAB-Matrix-to-MS-Office-Equation.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -38,18 +38,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Matrix Conversion between MATLAB and Microsoft Equation Editor" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/matlab/Working-MATLAB-with-MS-Excel.html b/blog/matlab/Working-MATLAB-with-MS-Excel.html index bbfc8a6f0..855eafa89 100644 --- a/blog/matlab/Working-MATLAB-with-MS-Excel.html +++ b/blog/matlab/Working-MATLAB-with-MS-Excel.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,18 +23,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Working MATLAB with MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/matlab/expand-twitter-short-url.html b/blog/matlab/expand-twitter-short-url.html index e12cd5f6a..ad87f4531 100644 --- a/blog/matlab/expand-twitter-short-url.html +++ b/blog/matlab/expand-twitter-short-url.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -50,18 +50,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Expand shorten URLs in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/matlab/file-io-and-file-system-in-matlab.html b/blog/matlab/file-io-and-file-system-in-matlab.html index ca2c6e499..f80275610 100644 --- a/blog/matlab/file-io-and-file-system-in-matlab.html +++ b/blog/matlab/file-io-and-file-system-in-matlab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -44,18 +44,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in File I/O and File System in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/matlab/matlab-packages-and-toolboxes.html b/blog/matlab/matlab-packages-and-toolboxes.html index 507c8a9ac..f032e5f71 100644 --- a/blog/matlab/matlab-packages-and-toolboxes.html +++ b/blog/matlab/matlab-packages-and-toolboxes.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -51,18 +51,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in My MATLAB Package and Toolbox Picks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/page2/index.html b/blog/page2/index.html index 0ad7d0e75..56539c8c3 100644 --- a/blog/page2/index.html +++ b/blog/page2/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,8 +23,9 @@ </div> </div> </section> <div id="jumptopageof"></div><section class="recent-posts row"> <div class="col-sm-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/taxirides.webp" alt="thumbnail for ☁ Engineer D..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/taxirides.jpg" alt="thumbnail for ☁ Engineer D..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" rel="bookmark">☁ Engineer Data in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP327 on Qwiklabs. You will practice the skills and knowledge to build a prediction model of taxi fares using machine learning...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/bigquery/">BigQuery</a></small> </li><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/machine-learning/">Machine Learning</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-08-26T15:30:00+08:00" itemprop="datePublished" title="Published on">26 Aug 2020</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp323-cloud-dataprep.webp" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp323-cloud-dataprep.png" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" rel="bookmark">☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP323 on Qwiklabs. You will practice the skills and knowledge for running Dataflow, Dataproc, and Dataprep as well as Google Cloud...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/bigquery/">BigQuery</a></small> </li><li> <small><a href="/tag/cloud-ai/">Cloud AI</a></small> </li><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/machine-learning/">Machine Learning</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-25T10:18:00+08:00" itemprop="dateModified" title="Updated on">25 Jun 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/taxirides.webp" alt="thumbnail for ☁ Engineer D..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/taxirides.jpg" alt="thumbnail for ☁ Engineer D..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" rel="bookmark">☁ Engineer Data in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP327 on Qwiklabs. You will practice the skills and knowledge to build a prediction model of taxi fares using machine learning...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/bigquery/">BigQuery</a></small> </li><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/machine-learning/">Machine Learning</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-08-26T15:30:00+08:00" itemprop="datePublished" title="Published on">26 Aug 2020</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp787-00.webp" alt="thumbnail for ☁ Insights f..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp787-00.jpg" alt="thumbnail for ☁ Insights f..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab" rel="bookmark">☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP787 on Qwiklabs. You will practice BigQuery for the data analysis of the COVID-19 open dataset `bigquery-public-data.covid19_open_data.covid19_open_data`.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/bigquery/">BigQuery</a></small> </li><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-10-08T03:56:00+08:00" itemprop="dateModified" title="Updated on">08 Oct 2020</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> @@ -44,9 +45,7 @@ </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2020/06/01/enjoy-our-new-theme" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="548" layout="intrinsic" src="/images/posts/jekyll/theme-after-may2020-chriskyfung.github.io.webp" alt="thumbnail for Launch new t..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="548" layout="intrinsic" src="/images/posts/jekyll/theme-after-may2020-chriskyfung.github.io.png" alt="thumbnail for Launch new t..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2020/06/01/enjoy-our-new-theme" rel="bookmark">Launch new theme</a></h3> <p class="card-text">Since migrated from Wix in 2017, this site has run on GitHub Pages for over 3 years. I knew nearly nothing about Jekyll and GitHub at that time. I had...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/jekyll/">Jekyll</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-07-14T16:00:00+08:00" itemprop="dateModified" title="Updated on">14 Jul 2020</time></div> <span class="post-read-more"><a href="/blog/2020/06/01/enjoy-our-new-theme" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/announcement/">Announcement</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> -<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/matlab/expand-twitter-short-url" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for Expand short..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/matlab/expand-twitter-short-url" rel="bookmark">Expand shorten URLs in MATLAB</a></h3> <p class="card-text">Sometimes I use MATLAB scripts to analyze Twitter posts. One issue is that Twitter uses shorten URLs started with t.co for the links, such as retweets. To get the original...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/matlab/">MATLAB</a></small> </li><li> <small><a href="/tag/twitter/">Twitter</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-05-15T00:00:00+08:00" itemprop="datePublished" title="Published on">15 May 2020</time></div> <span class="post-read-more"><a href="/blog/matlab/expand-twitter-short-url" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> -</div> -</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 2 of 5 </span><a class="older-posts" href="/blog/page3/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 2 of 5 </span><a class="older-posts" href="/blog/page3/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/page3/index.html b/blog/page3/index.html index 69e8b84ff..ad77a1db0 100644 --- a/blog/page3/index.html +++ b/blog/page3/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,8 +23,9 @@ </div> </div> </section> <div id="jumptopageof"></div><section class="recent-posts row"> <div class="col-sm-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-cover.webp" alt="thumbnail for ☁ Deploy to ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-cover.png" alt="thumbnail for ☁ Deploy to ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" rel="bookmark">☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for Google Cloud self-paced training GSP318 "Deploy to Kubernetes in Google Cloud: Challenge Lab" on Qwiklabs. It includes: How to create Docker images, Deploy and update the...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/jenkins/">Jenkins</a></small> </li><li> <small><a href="/tag/kubernetes/">Kubernetes</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-24T11:22:00+08:00" itemprop="dateModified" title="Updated on">24 Jun 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/matlab/expand-twitter-short-url" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for Expand short..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/matlab/expand-twitter-short-url" rel="bookmark">Expand shorten URLs in MATLAB</a></h3> <p class="card-text">Sometimes I use MATLAB scripts to analyze Twitter posts. One issue is that Twitter uses shorten URLs started with t.co for the links, such as retweets. To get the original...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/matlab/">MATLAB</a></small> </li><li> <small><a href="/tag/twitter/">Twitter</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-05-15T00:00:00+08:00" itemprop="datePublished" title="Published on">15 May 2020</time></div> <span class="post-read-more"><a href="/blog/matlab/expand-twitter-short-url" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-cover.webp" alt="thumbnail for ☁ Deploy to ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-cover.png" alt="thumbnail for ☁ Deploy to ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" rel="bookmark">☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for Google Cloud self-paced training GSP318 "Deploy to Kubernetes in Google Cloud: Challenge Lab" on Qwiklabs. It includes: How to create Docker images, Deploy and update the...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/jenkins/">Jenkins</a></small> </li><li> <small><a href="/tag/kubernetes/">Kubernetes</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-24T11:22:00+08:00" itemprop="dateModified" title="Updated on">24 Jun 2021</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/deploy-to-kubernetes-in-google-cloud-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="565" layout="intrinsic" src="/images/posts/qwiklabs/map.webp" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2NSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="565" layout="intrinsic" src="/images/posts/qwiklabs/map.jpg" alt="thumbnail for ☁ Perform Fo..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2NSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab" rel="bookmark">☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP315 "Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab" on Qwiklabs.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/cloud-function/">Cloud Function</a></small> </li><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-08-04T10:08:00+08:00" itemprop="dateModified" title="Updated on">04 Aug 2020</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> @@ -43,9 +44,7 @@ </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for How to add a..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog" rel="bookmark">How to add a custom Open Graph image tag to your tumblr blog</a></h3> <p class="card-text">Basically, Tumblr auto-generates Facebook Open Graph and/or Twitter Card markups to your blogs without a clear mechanism. I found that some of my Tumblr blog posts including the markups, but...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/custom-theme/">Custom Theme</a></small> </li><li> <small><a href="/tag/meta-tags/">Meta Tags</a></small> </li><li> <small><a href="/tag/open-graph/">Open Graph</a></small> </li><li> <small><a href="/tag/tumblr/">Tumblr</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-10-30T00:00:00+08:00" itemprop="datePublished" title="Published on">30 Oct 2019</time></div> <span class="post-read-more"><a href="/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/web-development/">Web Development</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> -<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2019/10/22/Follow-Me-on-Medium" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/medium_profile_top.webp" alt="thumbnail for Follow Me on..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/medium_profile_top.png" alt="thumbnail for Follow Me on..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2019/10/22/Follow-Me-on-Medium" rel="bookmark">Follow Me on Medium !</a></h3> <p class="card-text">Recently, I started publishing on Medium. I will gradually reissue my Qwiklabs articles to Medium platform. Not all, but some posts will be updated and/or upgraded with high resolution images....</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/medium/">Medium</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-10-22T18:15:00+08:00" itemprop="datePublished" title="Published on">22 Oct 2019</time></div> <span class="post-read-more"><a href="/blog/2019/10/22/Follow-Me-on-Medium" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/announcement/">Announcement</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> -</div> -</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page2/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 3 of 5 </span><a class="older-posts" href="/blog/page4/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page2/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 3 of 5 </span><a class="older-posts" href="/blog/page4/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/page4/index.html b/blog/page4/index.html index 3cd585667..a9da7e692 100644 --- a/blog/page4/index.html +++ b/blog/page4/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,8 +23,9 @@ </div> </div> </section> <div id="jumptopageof"></div><section class="recent-posts row"> <div class="col-sm-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="317" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP306-migrating-mysql-to-cloudsql-concepts-sequence.webp" alt="thumbnail for ☁ Migrate a ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="317" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP306-migrating-mysql-to-cloudsql-concepts-sequence.png" alt="thumbnail for ☁ Migrate a ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" rel="bookmark">☁ Migrate a MySQL Database to Google Cloud SQL | logbook</a></h3> <p class="card-text">A summary of Google Cloud self-paced training GSP306 "Migrate a MySQL Database to Google Cloud SQL" on Qwiklabs | 1. Check Existing WordPress Resources | 2. Create Cloud SQL Instance...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/mysql/">MySQL</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/wordpress/">WordPress</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-09-30T00:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2019</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2019/10/22/Follow-Me-on-Medium" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/medium_profile_top.webp" alt="thumbnail for Follow Me on..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/qwiklabs/medium_profile_top.png" alt="thumbnail for Follow Me on..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2019/10/22/Follow-Me-on-Medium" rel="bookmark">Follow Me on Medium !</a></h3> <p class="card-text">Recently, I started publishing on Medium. I will gradually reissue my Qwiklabs articles to Medium platform. Not all, but some posts will be updated and/or upgraded with high resolution images....</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/medium/">Medium</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-10-22T18:15:00+08:00" itemprop="datePublished" title="Published on">22 Oct 2019</time></div> <span class="post-read-more"><a href="/blog/2019/10/22/Follow-Me-on-Medium" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/announcement/">Announcement</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="317" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP306-migrating-mysql-to-cloudsql-concepts-sequence.webp" alt="thumbnail for ☁ Migrate a ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="317" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP306-migrating-mysql-to-cloudsql-concepts-sequence.png" alt="thumbnail for ☁ Migrate a ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" rel="bookmark">☁ Migrate a MySQL Database to Google Cloud SQL | logbook</a></h3> <p class="card-text">A summary of Google Cloud self-paced training GSP306 "Migrate a MySQL Database to Google Cloud SQL" on Qwiklabs | 1. Check Existing WordPress Resources | 2. Create Cloud SQL Instance...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/mysql/">MySQL</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/wordpress/">WordPress</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-09-30T00:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2019</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster" aria-hidden="true" tabindex="-1"><figure><amp-img width="524" height="440" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP305-step3-rolling-update-GKE-application.webp" alt="thumbnail for ☁ Scale Out ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ0MCIgd2lkdGg9IjUyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="524" height="440" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP305-step3-rolling-update-GKE-application.png" alt="thumbnail for ☁ Scale Out ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ0MCIgd2lkdGg9IjUyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster" rel="bookmark">☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook</a></h3> <p class="card-text">A summary of Google Cloud self-paced training GSP305 "Scale Out and Update a Containerized Application on a Kubernetes Cluster" on Qwiklabs | 1. Build a Docker Image of Sample Application...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/google-cloud/">Google Cloud</a></small> </li><li> <small><a href="/tag/kubernetes/">Kubernetes</a></small> </li><li> <small><a href="/tag/logbook/">Logbook</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-09-27T00:00:00+08:00" itemprop="datePublished" title="Published on">27 Sep 2019</time></div> <span class="post-read-more"><a href="/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> @@ -48,10 +49,7 @@ <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2015/11/27/template-OVITO-python-modifier" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for [template] O..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2015/11/27/template-OVITO-python-modifier" rel="bookmark">[template] OVITO python modifier</a></h3> <p class="card-text">OVITO 2.6.0 allows users to program their own modifier in Python. Here provides a template including the common headers and a for-loop for per-particle assignment. </p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li><li> <small><a href="/tag/ovito/">OVITO</a></small> </li><li> <small><a href="/tag/python/">Python</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-11-27T00:00:00+08:00" itemprop="datePublished" title="Published on">27 Nov 2015</time></div> <span class="post-read-more"><a href="/blog/2015/11/27/template-OVITO-python-modifier" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> -<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for OVITO - The ..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" rel="bookmark">OVITO - The Open Visualization Tool - Version 2.6.1 - has been released</a></h3> <p class="card-text">I do like using OVITO for analysis and visualization of my LAMMPS results. -</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li><li> <small><a href="/tag/ovito/">OVITO</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-11-27T00:00:00+08:00" itemprop="datePublished" title="Published on">27 Nov 2015</time></div> <span class="post-read-more"><a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> -</div> -</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page3/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 4 of 5 </span><a class="older-posts" href="/blog/page5/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page3/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 4 of 5 </span><a class="older-posts" href="/blog/page5/" aria-label="Goto Page with Older Posts">Older »</a></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/page5/index.html b/blog/page5/index.html index 16e66b95b..49b00ffe1 100644 --- a/blog/page5/index.html +++ b/blog/page5/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,8 +23,10 @@ </div> </div> </section> <div id="jumptopageof"></div><section class="recent-posts row"> <div class="col-sm-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/comp-sci/fuzzy-logic" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/notebook-4839909_o128.webp" alt="thumbnail for Short Notes ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/notebook-4839909_o128.png" alt="thumbnail for Short Notes ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/comp-sci/fuzzy-logic" rel="bookmark">Short Notes on Fuzzy Logic</a></h3> <p class="card-text">A summary about the types of Fuzzy Logic and their applications in control systems.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/computer-science/">Computer Science</a></small> </li><li> <small><a href="/tag/fuzzy-logic/">Fuzzy Logic</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-06-10T08:36:00+08:00" itemprop="datePublished" title="Published on">10 Jun 2015</time></div> <span class="post-read-more"><a href="/blog/comp-sci/fuzzy-logic" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li><li> <small><a href="/category/computer-science/">Computer Science</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div> <div class="col-sm-8"> <div class="section-title"> <h2><span>All Stories</span></h2> </div> <div class="masonrygrid row listrecent"><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for OVITO - The ..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" rel="bookmark">OVITO - The Open Visualization Tool - Version 2.6.1 - has been released</a></h3> <p class="card-text">I do like using OVITO for analysis and visualization of my LAMMPS results. +</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li><li> <small><a href="/tag/ovito/">OVITO</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-11-27T00:00:00+08:00" itemprop="datePublished" title="Published on">27 Nov 2015</time></div> <span class="post-read-more"><a href="/blog/2015/11/27/OVITO-The-Open-Visualization-Tool-Version-261-has-been-released" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/comp-sci/fuzzy-logic" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="411" layout="intrinsic" src="/images/posts/notebook-4839909_o128.webp" alt="thumbnail for Short Notes ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="411" layout="intrinsic" src="/images/posts/notebook-4839909_o128.png" alt="thumbnail for Short Notes ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/comp-sci/fuzzy-logic" rel="bookmark">Short Notes on Fuzzy Logic</a></h3> <p class="card-text">A summary about the types of Fuzzy Logic and their applications in control systems.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/computer-science/">Computer Science</a></small> </li><li> <small><a href="/tag/fuzzy-logic/">Fuzzy Logic</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-06-10T08:36:00+08:00" itemprop="datePublished" title="Published on">10 Jun 2015</time></div> <span class="post-read-more"><a href="/blog/comp-sci/fuzzy-logic" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li><li> <small><a href="/category/computer-science/">Computer Science</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/matlab/Working-MATLAB-with-MS-Excel" aria-hidden="true" tabindex="-1"><figure><amp-img width="251" height="262" layout="intrinsic" src="/images/posts/matlab/excel_addin_menu.webp" alt="thumbnail for Working MATL..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI2MiIgd2lkdGg9IjI1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="251" height="262" layout="intrinsic" src="/images/posts/matlab/excel_addin_menu.png" alt="thumbnail for Working MATL..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI2MiIgd2lkdGg9IjI1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/matlab/Working-MATLAB-with-MS-Excel" rel="bookmark">Working MATLAB with MS Excel</a></h3> <p class="card-text">This is a tutorial to show the installation of Spreadsheet Link EX for use with MATLAB and Excel. </p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/data-science/">Data Science</a></small> </li><li> <small><a href="/tag/matlab/">MATLAB</a></small> </li><li> <small><a href="/tag/ms-excel/">MS Excel</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2015-03-10T00:00:00+08:00" itemprop="datePublished" title="Published on">10 Mar 2015</time></div> <span class="post-read-more"><a href="/blog/matlab/Working-MATLAB-with-MS-Excel" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> @@ -45,7 +47,7 @@ </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" aria-hidden="true" tabindex="-1"><figure><amp-img width="620" height="158" layout="intrinsic" src="/images/posts/lammps/lammps_send_email_transparent.webp" alt="thumbnail for How to Send ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OCIgd2lkdGg9IjYyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="620" height="158" layout="intrinsic" src="/images/posts/lammps/lammps_send_email_transparent.png" alt="thumbnail for How to Send ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OCIgd2lkdGg9IjYyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" rel="bookmark">How to Send a Notification from a LAMMPS Simulation to Your Email</a></h3> <p class="card-text">Molecular dynamics simulations often take long computational times, from several hours to a few days. It is a boring job to monitor the progress of simulations. Very often, we switch...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/email/">Email</a></small> </li><li> <small><a href="/tag/lammps/">LAMMPS</a></small> </li><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2014-06-13T00:00:00+08:00" itemprop="datePublished" title="Published on">13 Jun 2014</time></div> <span class="post-read-more"><a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div><div class="clearfix"></div> </div> </div> </div> </article> </div> -</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page4/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 5 of 5 </span></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> <div class="bottompagination"> <span class="navigation" role="navigation"><nav class="pagination" role="navigation" aria-label="Pagination Navigation"><a class="newer-posts" href="/blog/page4/" aria-label="Goto Page with Newer Posts">« Newer </a><span class="page-number"> Page 5 of 5 </span></nav> </span> </div> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Automate-Interactions-with-Contact-Center-AI-Challenge-Lab.html b/blog/qwiklabs/Automate-Interactions-with-Contact-Center-AI-Challenge-Lab.html index 115b89b36..ddc0a81d6 100644 --- a/blog/qwiklabs/Automate-Interactions-with-Contact-Center-AI-Challenge-Lab.html +++ b/blog/qwiklabs/Automate-Interactions-with-Contact-Center-AI-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -45,7 +45,7 @@ </blockquote> <figure><amp-img width="914" height="847" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp311-task7-bigquery.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg0NyIgd2lkdGg9IjkxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="914" height="847" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp311-task7-bigquery.png" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg0NyIgd2lkdGg9IjkxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h2 id="task-8-run-a-data-loss-prevention-job">Task 8: Run a Data Loss Prevention Job<a class="anchor-link" href="#task-8-run-a-data-loss-prevention-job"><i class="fas fa-link"></i></a></h2> <p>You must make a copy of your BigQuery table before running a Data Loss Prevention Job</p> <ol> <li>Navigate to <strong>BigQuery</strong> in the Cloud Console</li> <li>Select the table generated by the Dataflow pipeline.</li> <li>Click on <strong>More</strong> > <strong>Query settings</strong>.</li> <li>Assign a Table name, e.g. <code class="language-plaintext highlighter-rouge">copied</code>, then click <strong>Save</strong>.</li> </ol> <figure class="text-center"><amp-img width="317" height="314" layout="intrinsic" src="/images/posts//qwiklabs/qwiklab-gsp311-task8-copy-bigqury-table.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNCIgd2lkdGg9IjMxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="317" height="314" layout="intrinsic" src="/images/posts//qwiklabs/qwiklab-gsp311-task8-copy-bigqury-table.png" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMxNCIgd2lkdGg9IjMxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <ol start="5"> <li> <p>Run the following SQL query:</p> <div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="nv">`[YOUR_PROJECT_ID].[DATASET_NAME].[TABLE]`</span> </code></pre></div> </div> </li> <li>Select the copied table, then click on <strong>EXPORT</strong> > <strong>Scan with DLP</strong>.</li> <li>In the <em>Create job or job trigger</em> pane, assign a Job ID and then click <strong>CREATE</strong>.</li> <li>Click <strong>CONFIRM CREATE</strong>.</li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>Tasks 1 to 5 were pretty straightforward. If you prefer using the command line to create the resources, please refer to the <a data-vars-event-label="https://github.com/GoogleCloudPlatform/dataflow-contact-center-speech-analysis" href="https://github.com/GoogleCloudPlatform/dataflow-contact-center-speech-analysis">README file</a> of the Speech Analysis Framework in the GitHub repository. You can also find the commands to deploy the <code class="language-plaintext highlighter-rouge">saflongrunjobdataflow.py</code> Python script in Task 6 and the SQL query for getting the answer in Task 7.</p> <p>Only Task 7 was a little tricky. You will get stuck if you try to make a copy of the table using the <strong>COPY TABLE</strong> button in the BigQuery console. It can copy the table structure but cannot copy the data in the table. Once you know how to correctly clone the table, the task is just a piece of cake.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-uiKc2_i8IOM" width="480" height="270" layout="responsive" data-videoid="uiKc2_i8IOM" title="GSP311 Automate Interactions with Contact Center AI: Challenge Lab" data-vars-video-title="GSP311 Automate Interactions with Contact Center AI: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=uiKc2_i8IOM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=uiKc2_i8IOM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>Tasks 1 to 5 were pretty straightforward. If you prefer using the command line to create the resources, please refer to the <a data-vars-event-label="https://github.com/GoogleCloudPlatform/dataflow-contact-center-speech-analysis" href="https://github.com/GoogleCloudPlatform/dataflow-contact-center-speech-analysis">README file</a> of the Speech Analysis Framework in the GitHub repository. You can also find the commands to deploy the <code class="language-plaintext highlighter-rouge">saflongrunjobdataflow.py</code> Python script in Task 6 and the SQL query for getting the answer in Task 7.</p> <p>Only Task 7 was a little tricky. You will get stuck if you try to make a copy of the table using the <strong>COPY TABLE</strong> button in the BigQuery console. It can copy the table structure but cannot copy the data in the table. Once you know how to correctly clone the table, the task is just a piece of cake.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-uiKc2_i8IOM" width="480" height="270" layout="responsive" credentials="omit" data-videoid="uiKc2_i8IOM" title="GSP311 Automate Interactions with Contact Center AI: Challenge Lab" data-vars-video-title="GSP311 Automate Interactions with Contact Center AI: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=uiKc2_i8IOM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=uiKc2_i8IOM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Lab</span> <span class="n">start</span> <span class="m">00</span>:<span class="m">59</span> <span class="n">Task1</span>: <span class="n">Create</span> <span class="n">a</span> <span class="n">Cloud</span> <span class="n">Storage</span> <span class="n">Bucket</span> @@ -66,18 +66,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Automate Interactions with Contact Center AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='uiKc2_i8IOM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Build-a-Website-on-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Build-a-Website-on-Google-Cloud-Challenge-Lab.html index 0da03c8c7..7cf83a264 100644 --- a/blog/qwiklabs/Build-a-Website-on-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Build-a-Website-on-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -48,7 +48,7 @@ </code></pre></div></div> <h2 id="task-7-deploy-the-frontend-microservice">Task 7: Deploy the Frontend microservice<a class="anchor-link" href="#task-7-deploy-the-frontend-microservice"><i class="fas fa-link"></i></a></h2> <p>Similar to Task 4, use <code class="language-plaintext highlighter-rouge">kubectl</code> commands to deploy the Frontend microservice:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl create deployment frontend <span class="nt">--image</span><span class="o">=</span>gcr.io/<span class="k">${</span><span class="nv">GOOGLE_CLOUD_PROJECT</span><span class="k">}</span>/frontend:1.0.0 kubectl expose deployment frontend <span class="nt">--type</span><span class="o">=</span>LoadBalancer <span class="nt">--port</span> 80 <span class="nt">--target-port</span> 8080 -</code></pre></div></div> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>Most steps in the exercise are identical to those in the lab <strong>Migrating a Monolithic Website to Microservices on Google Kubernetes Engine</strong>. To complete this challenge, make sure you carefully replace the cluster and deployment names with the specified ones. If you still have questions, you can leave a comment below.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-8jumRGDgxiY" width="480" height="270" layout="responsive" data-videoid="8jumRGDgxiY" title="GSP319 Build a Website on Google Cloud: Challenge Lab" data-vars-video-title="GSP319 Build a Website on Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=8jumRGDgxiY" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=8jumRGDgxiY" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</code></pre></div></div> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>Most steps in the exercise are identical to those in the lab <strong>Migrating a Monolithic Website to Microservices on Google Kubernetes Engine</strong>. To complete this challenge, make sure you carefully replace the cluster and deployment names with the specified ones. If you still have questions, you can leave a comment below.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-8jumRGDgxiY" width="480" height="270" layout="responsive" credentials="omit" data-videoid="8jumRGDgxiY" title="GSP319 Build a Website on Google Cloud: Challenge Lab" data-vars-video-title="GSP319 Build a Website on Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=8jumRGDgxiY" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=8jumRGDgxiY" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Lab</span> <span class="n">Start</span>: <span class="n">Overview</span> <span class="m">01</span>:<span class="m">00</span> <span class="n">Task1</span>: <span class="n">Download</span> <span class="n">the</span> <span class="n">monolith</span> <span class="n">code</span> <span class="n">and</span> <span class="n">build</span> <span class="n">your</span> <span class="n">container</span> @@ -69,18 +69,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Build a Website on Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='8jumRGDgxiY']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Build-and-Deploy-a-Docker-Image-to-a-Kubernetes-Cluster.html b/blog/qwiklabs/Build-and-Deploy-a-Docker-Image-to-a-Kubernetes-Cluster.html index 71c55b7b5..2b2027b5c 100644 --- a/blog/qwiklabs/Build-and-Deploy-a-Docker-Image-to-a-Kubernetes-Cluster.html +++ b/blog/qwiklabs/Build-and-Deploy-a-Docker-Image-to-a-Kubernetes-Cluster.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -46,18 +46,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Build-and-Manage-APIs-with-Apigee-Challenge-Lab.html b/blog/qwiklabs/Build-and-Manage-APIs-with-Apigee-Challenge-Lab.html index d94547863..6cbc75d88 100644 --- a/blog/qwiklabs/Build-and-Manage-APIs-with-Apigee-Challenge-Lab.html +++ b/blog/qwiklabs/Build-and-Manage-APIs-with-Apigee-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -128,7 +128,7 @@ "expiration": "10/2025" } '</span> </code></pre></div></div> <p>Expected output:</p> <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="nl">"valid"</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span><span class="nl">"message"</span><span class="p">:</span><span class="s2">"mock response"</span><span class="p">}</span><span class="w"> -</span></code></pre></div></div> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-Hcs40i_2o0E" width="480" height="270" layout="responsive" data-videoid="Hcs40i_2o0E" title="GSP336 Build and Manage APIs with Apigee: Challenge Lab" data-vars-video-title="GSP336 Build and Manage APIs with Apigee: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=Hcs40i_2o0E" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=Hcs40i_2o0E" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</span></code></pre></div></div> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-Hcs40i_2o0E" width="480" height="270" layout="responsive" credentials="omit" data-videoid="Hcs40i_2o0E" title="GSP336 Build and Manage APIs with Apigee: Challenge Lab" data-vars-video-title="GSP336 Build and Manage APIs with Apigee: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=Hcs40i_2o0E" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=Hcs40i_2o0E" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> --- <span class="n">Task</span> <span class="m">1</span> --- @@ -158,18 +158,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Build and Manage APIs with Apigee: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='Hcs40i_2o0E']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Build-and-Secure-Networks-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Build-and-Secure-Networks-in-Google-Cloud-Challenge-Lab.html index a96f0696e..50d3bfa25 100644 --- a/blog/qwiklabs/Build-and-Secure-Networks-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Build-and-Secure-Networks-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -22,7 +22,7 @@ </ol> <h2 id="5-create-a-firewall-rule-that-allows-traffic-on-ssh-tcp22-from-acme-mgmt-subnet-network-address-and-add-network-tag-on-juice-shop">5. Create a firewall rule that allows traffic on SSH (tcp/22) from acme-mgmt-subnet network address and add network tag on juice-shop<a class="anchor-link" href="#5-create-a-firewall-rule-that-allows-traffic-on-ssh-tcp22-from-acme-mgmt-subnet-network-address-and-add-network-tag-on-juice-shop"><i class="fas fa-link"></i></a></h2> <ol> <li>Navigate to <strong>VPC network</strong> > <strong>VPC networks</strong>.</li> <li>Copy the IP address range of the <code class="language-plaintext highlighter-rouge">acme-mgmt-subnet</code>.</li> <li>Go back to the Firewall Rules page, and click <strong>Create firewall rule</strong>.</li> <li> <p>Configure the following settings:</p> <table> <thead> <tr> <th>Field</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>Name</td> <td>e.g. <code class="language-plaintext highlighter-rouge">allow-ssh-from-mgmt-subnet</code></td> </tr> <tr> <td>Direction of traffic</td> <td>Ingress</td> </tr> <tr> <td>Targets</td> <td>Specified target tags</td> </tr> <tr> <td>Target tags</td> <td><code class="language-plaintext highlighter-rouge">bastion</code> and <code class="language-plaintext highlighter-rouge">juice-shop</code></td> </tr> <tr> <td>Source IP ranges</td> <td><em>IP address range of your aceme-mgmt-subnet</em></td> </tr> <tr> <td>Protocols and ports</td> <td>Select <strong>TCP</strong> and enter <code class="language-plaintext highlighter-rouge">22</code> to allow SSH</td> </tr> </tbody> </table> </li> </ol> <figure class="text-center"><amp-img width="562" height="887" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp322-firewall-rule-settings-for-ssh-from-acme-mgmt-subnet.webp" alt="Firewall rule settings for the SSH traffic from acme-mgmt-subnet" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg4NyIgd2lkdGg9IjU2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="562" height="887" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp322-firewall-rule-settings-for-ssh-from-acme-mgmt-subnet.jpg" alt="Firewall rule settings for the SSH traffic from acme-mgmt-subnet" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg4NyIgd2lkdGg9IjU2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h2 id="6-ssh-to-bastion-host-via-iap-and-juice-shop-via-bastion">6. SSH to bastion host via IAP and juice-shop via bastion<a class="anchor-link" href="#6-ssh-to-bastion-host-via-iap-and-juice-shop-via-bastion"><i class="fas fa-link"></i></a></h2> <p>After configuring the firewall rules, try to verify the environment via the bastion.</p> <ol> <li>Navigate to <strong>Compute Engine</strong> > <strong>VM instances</strong>.</li> <li>Copy the Internal IP of the <strong>juice-shop</strong> instance.</li> <li>Click on the SSH button in the row of the <strong>bastion</strong> instance.</li> <li> <p>In the SSH console, access the juice-shop from the bastion using the following command:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh <internal-IP-of-juice-shop> </code></pre></div> </div> <p>(Remember to REPLACE <code class="language-plaintext highlighter-rouge"><internal-IP-of-juice-shop></code> with the copied IP address)</p> </li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-NToEHzJTpgs" width="480" height="270" layout="responsive" data-videoid="NToEHzJTpgs" title="GSP322 Build and Secure Networks in Google Cloud: Challenge Lab" data-vars-video-title="GSP322 Build and Secure Networks in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=NToEHzJTpgs" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=NToEHzJTpgs" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-NToEHzJTpgs" width="480" height="270" layout="responsive" credentials="omit" data-videoid="NToEHzJTpgs" title="GSP322 Build and Secure Networks in Google Cloud: Challenge Lab" data-vars-video-title="GSP322 Build and Secure Networks in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=NToEHzJTpgs" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=NToEHzJTpgs" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">0</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="n">and</span> <span class="n">Provisioning</span> <span class="m">2</span>:<span class="m">18</span> <span class="n">Remove</span> <span class="n">the</span> <span class="n">overly</span> <span class="n">permissive</span> <span class="n">rules</span> @@ -41,18 +41,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Build and Secure Networks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='NToEHzJTpgs']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Configure-Windows-Bastion-Host-with-Terraform-on-GCP.html b/blog/qwiklabs/Configure-Windows-Bastion-Host-with-Terraform-on-GCP.html index 24594498c..694209199 100644 --- a/blog/qwiklabs/Configure-Windows-Bastion-Host-with-Terraform-on-GCP.html +++ b/blog/qwiklabs/Configure-Windows-Bastion-Host-with-Terraform-on-GCP.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -13,7 +13,7 @@ </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <h1 class="posttitle">☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP</h1> </div> <amp-img data-hero class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="495" layout="responsive" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.webp" alt="☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:67.8082%"></i-amphtml-sizer> <amp-img data-hero fallback class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="495" layout="responsive" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.png" alt="☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:67.8082%"></i-amphtml-sizer><img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.png"></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.webp"></amp-img> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-09-07T00:00:00+08:00" itemprop="datePublished" title="Published on">07 Sep 2019</time></div> </small> </p> <div class="article-post"><p>The topic <em>“Configure Secure RDP using a Windows Bastion Host”</em> is from a challenging lab that I took on Qwiklabs (here is the <a data-vars-event-label="https://www.qwiklabs.com/catalog?keywords=GSP303" href="https://www.qwiklabs.com/catalog?keywords=GSP303">link to the lab</a>). It was a tricky one that I failed and did a few times of retakes to accomplish it. If you face the same challenge, I hope this blog article would help you. I will share my codes with you for your reference.</p> <p><a data-vars-event-label="https://www.qwiklabs.com" href="https://www.qwiklabs.com">Qwiklabs</a> has over 400 hands-on labs and is a great online self-paced learning <strong>Google Cloud Platform (GCP)</strong>. Most exercises on Qwiklabs provide clear step-by-step instructions for you to follow and finish the labs, except a few Advanced Challenge Labs. Those labs are not easy because they do not offer the “cookbook” steps. You have to figure out the solutions by yourself as the exercises for students who prepare for the <a data-vars-event-label="https://cloud.google.com/certification/cloud-architect" href="https://cloud.google.com/certification/cloud-architect">Google Cloud Certified Professional Cloud Architect</a>. The lab <strong>GSP303</strong> <em>“<a data-vars-event-label="https://google.qwiklabs.com/focuses/1737?parent=catalog" href="https://google.qwiklabs.com/focuses/1737?parent=catalog">Configure Secure RDP using a Windows Bastion Host</a>“</em> is one of the challenge exercises.</p> <h2 id="brief-introduction-of-challenge-scenario">Brief Introduction of Challenge Scenario<a class="anchor-link" href="#brief-introduction-of-challenge-scenario"><i class="fas fa-link"></i></a></h2> <p>When you open the page of this lab on Qwiklabs, you can find the task requirements by click the green activity tracker (on the top right of the page) to expand the score box.</p> <figure class="shadow-none text-center"><amp-img width="608" height="823" layout="intrinsic" src="/images/posts/qwiklabs/score_box_of_qwiklabs_GSP303.webp" alt="Screenshot of Green Score box of Qwiklabs Hands-on-lab GSP303" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjgyMyIgd2lkdGg9IjYwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="608" height="823" layout="intrinsic" src="/images/posts/qwiklabs/score_box_of_qwiklabs_GSP303.png" alt="Screenshot of Green Score box of Qwiklabs Hands-on-lab GSP303" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjgyMyIgd2lkdGg9IjYwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>The screenshot above shows that there are six steps required for completing this lab. Combining with the instruction details, they are translated to the following mission statements.</p> <ol> <li> <p>Create a new non-default VPC called <code class="language-plaintext highlighter-rouge">securenetwork</code>.</p> </li> <li> <p>Create a new non-default subnet within <code class="language-plaintext highlighter-rouge">securenetwork</code>.</p> </li> <li> <p>Configure a firewall rule that allows TCP port 3389 traffic ( for RDP ) the internet to the bastion host called <code class="language-plaintext highlighter-rouge">vm-bastionhost</code> using network tags.</p> </li> <li> <p>Create a Windows 2016 server instance <code class="language-plaintext highlighter-rouge">vm-bastionhost</code> by applying the above firewall rule.</p> </li> <li> <p>Create a Windows 2016 server instance called <code class="language-plaintext highlighter-rouge">vm-securehost</code> that does not have a public IP address.</p> </li> <li> <p>The <code class="language-plaintext highlighter-rouge">vm-securehost</code> is running Microsoft IIS web server software.</p> </li> -</ol> <amp-youtube id="yt-nyimrSBKpr8" width="480" height="270" layout="responsive" data-videoid="nyimrSBKpr8" title="Configure Secure RDP using a Windows Bastion Host" data-vars-video-title="Configure Secure RDP using a Windows Bastion Host" data-vars-video-url="https://www.youtube.com/watch?v=nyimrSBKpr8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=nyimrSBKpr8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <amp-youtube id="yt-nyimrSBKpr8" width="480" height="270" layout="responsive" credentials="omit" data-videoid="nyimrSBKpr8" title="Configure Secure RDP using a Windows Bastion Host" data-vars-video-title="Configure Secure RDP using a Windows Bastion Host" data-vars-video-url="https://www.youtube.com/watch?v=nyimrSBKpr8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=nyimrSBKpr8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <p><br></p> <p>You can manually create and configure the cloud resources using the GCP console, but <a data-vars-event-label="https://www.terraform.io/" href="https://www.terraform.io/">Terraform</a> is a more robust approach to deploy the solution automatically with appropriate declarative configuration files.</p> <figure><amp-img width="730" height="495" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.webp" alt="Schematic Diagram of the Secure RDP Windows Network" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ5NSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="495" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-GSP303-diagram.png" alt="Schematic Diagram of the Secure RDP Windows Network" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ5NSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Schematic Diagram of the Secure RDP Windows Network</figcaption></figure> <h2 id="deploy-the-infrastructure-on-gcp-with-terraform">Deploy the infrastructure on GCP with Terraform<a class="anchor-link" href="#deploy-the-infrastructure-on-gcp-with-terraform"><i class="fas fa-link"></i></a></h2> <p>If you are not familiar with Terraform, I recommend you learn or practice the Quest <em>“<a data-vars-event-label="https://google.qwiklabs.com/quests/44" href="https://google.qwiklabs.com/quests/44">Managing Cloud Infrastructure with Terraform</a>“</em> before getting started.</p> <h3 id="verifying-terraform-installation">Verifying Terraform Installation<a class="anchor-link" href="#verifying-terraform-installation"><i class="fas fa-link"></i></a></h3> <p>In your GCP project, launch a Cloud Shell to run the following scripts to download and set up Terraform.</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Check the current Terraform version</span> terraform <span class="nt">--version</span> @@ -174,18 +174,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Use Terraform to Configure Secure RDP using a Windows Bastion Host on GCP" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='nyimrSBKpr8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Configure-a-Firewall-and-a-Startup-Script-with-Deployment-Manager.html b/blog/qwiklabs/Configure-a-Firewall-and-a-Startup-Script-with-Deployment-Manager.html index 8a01ea844..dadba981b 100644 --- a/blog/qwiklabs/Configure-a-Firewall-and-a-Startup-Script-with-Deployment-Manager.html +++ b/blog/qwiklabs/Configure-a-Firewall-and-a-Startup-Script-with-Deployment-Manager.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -60,18 +60,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Controlling-Your-Costs-Quiz.html b/blog/qwiklabs/Controlling-Your-Costs-Quiz.html index cbd740a0d..0a325e75e 100644 --- a/blog/qwiklabs/Controlling-Your-Costs-Quiz.html +++ b/blog/qwiklabs/Controlling-Your-Costs-Quiz.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -29,18 +29,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Controlling Your Costs [Quiz] | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Deploy-a-Compute-Instance-with-a-Remote-Startup-Script.html b/blog/qwiklabs/Deploy-a-Compute-Instance-with-a-Remote-Startup-Script.html index db26b6705..cb9169ccb 100644 --- a/blog/qwiklabs/Deploy-a-Compute-Instance-with-a-Remote-Startup-Script.html +++ b/blog/qwiklabs/Deploy-a-Compute-Instance-with-a-Remote-Startup-Script.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -31,18 +31,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Deploy a Compute Instance with a Remote Startup Script | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Deploy-and-Manage-Cloud-Environments-with-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Deploy-and-Manage-Cloud-Environments-with-Google-Cloud-Challenge-Lab.html index a8906956a..4762c58dd 100644 --- a/blog/qwiklabs/Deploy-and-Manage-Cloud-Environments-with-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Deploy-and-Manage-Cloud-Environments-with-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -52,18 +52,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Deploy and Manage Cloud Environments with Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Deploy-to-Kubernetes-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Deploy-to-Kubernetes-in-Google-Cloud-Challenge-Lab.html index 6e36c6061..53f65af42 100644 --- a/blog/qwiklabs/Deploy-to-Kubernetes-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Deploy-to-Kubernetes-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -61,7 +61,7 @@ git add <span class="k">*</span> git commit <span class="nt">-m</span> <span class="s1">'green to orange'</span> git push origin master -</code></pre></div></div> <p>Finally, manually trigger the build in the Jenkins console</p> <figure><amp-img width="730" height="342" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-jenkins-build-queue.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="342" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-jenkins-build-queue.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <figure><amp-img width="730" height="748" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-valkyrie-app-dev.2.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="748" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-valkyrie-app-dev.2.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-jtHZ_aSlI-4" width="480" height="270" layout="responsive" data-videoid="jtHZ_aSlI-4" title="GSP318 Deploy to Kubernetes in Google Cloud: Challenge Lab" data-vars-video-title="GSP318 Deploy to Kubernetes in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=jtHZ_aSlI-4" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=jtHZ_aSlI-4" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</code></pre></div></div> <p>Finally, manually trigger the build in the Jenkins console</p> <figure><amp-img width="730" height="342" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-jenkins-build-queue.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="342" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-jenkins-build-queue.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <figure><amp-img width="730" height="748" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-valkyrie-app-dev.2.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="748" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-GSP318-valkyrie-app-dev.2.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc0OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-jtHZ_aSlI-4" width="480" height="270" layout="responsive" credentials="omit" data-videoid="jtHZ_aSlI-4" title="GSP318 Deploy to Kubernetes in Google Cloud: Challenge Lab" data-vars-video-title="GSP318 Deploy to Kubernetes in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=jtHZ_aSlI-4" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=jtHZ_aSlI-4" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">0</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> & <span class="n">Overview</span> <span class="m">1</span>:<span class="m">18</span> <span class="n">Task</span> <span class="m">1</span>: <span class="n">Create</span> <span class="n">a</span> <span class="n">Docker</span> <span class="n">image</span> <span class="n">and</span> <span class="n">store</span> <span class="n">the</span> <span class="n">Dockerfile</span> @@ -80,18 +80,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Deploy to Kubernetes in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='jtHZ_aSlI-4']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab.html index c521c2cf7..55c59fc07 100644 --- a/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -95,7 +95,7 @@ <span class="k">FROM</span> <span class="n">taxitrips</span> <span class="p">))</span> </code></pre></div> </div> </li> -</ol> <p>At the end of the lab, your BigQuery dataset should contain the following tables.</p> <figure class="text-center"><amp-img width="262" height="217" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp327-task3-resulted-tables.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIxNyIgd2lkdGg9IjI2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="262" height="217" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp327-task3-resulted-tables.png" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIxNyIgd2lkdGg9IjI2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-myYCfRS15fM" width="480" height="270" layout="responsive" data-videoid="myYCfRS15fM" title="GSP327 Engineer Data in Google Cloud: Challenge Lab" data-vars-video-title="GSP327 Engineer Data in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=myYCfRS15fM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=myYCfRS15fM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p>At the end of the lab, your BigQuery dataset should contain the following tables.</p> <figure class="text-center"><amp-img width="262" height="217" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp327-task3-resulted-tables.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIxNyIgd2lkdGg9IjI2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="262" height="217" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp327-task3-resulted-tables.png" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIxNyIgd2lkdGg9IjI2MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-myYCfRS15fM" width="480" height="270" layout="responsive" credentials="omit" data-videoid="myYCfRS15fM" title="GSP327 Engineer Data in Google Cloud: Challenge Lab" data-vars-video-title="GSP327 Engineer Data in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=myYCfRS15fM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=myYCfRS15fM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="m">00</span>:<span class="m">50</span> <span class="n">Task1</span>: <span class="n">Clean</span> <span class="n">your</span> <span class="n">training</span> <span class="n">data</span> @@ -112,18 +112,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Engineer Data in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='myYCfRS15fM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab.html b/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab.html index cfd56de67..c5b3ef47c 100644 --- a/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab.html +++ b/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -59,7 +59,7 @@ </ol> <h3 id="troubleshooting-runtime-version-issue">Troubleshooting runtime version issue<a class="anchor-link" href="#troubleshooting-runtime-version-issue"><i class="fas fa-link"></i></a></h3> <p>The lab had a serious bug when I was carrying it out on Jun 12, 2020. I couldn’t pass the third checkpoint if set up the AI Platform models according to the lab instruction. The issue seems to be caused by the inconsistencies between the GCP training material and the Qwiklabs marking scheme. While the notebook guided to create the models with runtime version 2.1 and Python 3.7, the checkpoint message specified the required runtime version = 1.14 as shown in the below picture.</p> <figure class="text-center"><amp-img width="452" height="208" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwOCIgd2lkdGg9IjQ1MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="452" height="208" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwOCIgd2lkdGg9IjQ1MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Checkpoint requirement for creating your AI Platform models</figcaption></figure> <p>Unfortunately, it still doesn’t work if you just change the runtime version from 2.1 to 1.14. The runtime version 1.14 must be coupled with Python 3.5, according to the <a data-vars-event-label="https://cloud.google.com/ai-platform/prediction/docs/runtime-version-list#runtime-version-support" href="https://cloud.google.com/ai-platform/prediction/docs/runtime-version-list#runtime-version-support">AI Platform Documentation</a>. Thus, after replacing the runtime and Python version numbers, correspondingly, the codes for creating the AI Platform models should be modified as shown below.</p> <figure class="text-center"><amp-img width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OSIgd2lkdGg9IjY3NSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OSIgd2lkdGg9IjY3NSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Create your first AI Platform model: complete_model<br>(Fixed with --runtime-version=1.14, --python-version=3.5)</figcaption></figure> <figure class="text-center"><amp-img width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OSIgd2lkdGg9IjY3NSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OSIgd2lkdGg9IjY3NSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Create your second AI Platform model: limited_model<br> (Fixed with --runtime-version=1.14, --python-version=3.5)</figcaption></figure> <h2 id="use-the-what-if-tool-to-explore-biases">Use the What-If Tool to explore biases<a class="anchor-link" href="#use-the-what-if-tool-to-explore-biases"><i class="fas fa-link"></i></a></h2> <p>Run the last cell in the notebook to activate What-If Tool. Explore the differences between the two models and you should be able to get the answers as follows:</p> <blockquote> <p>1. In the Performance and Fairness tab, slice by sex (applicant_sex_name_Female). How does the complete model compare to the limited model for females?</p> </blockquote> <figure class="ml-li"><amp-img width="399" height="79" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.webp" alt="The complete model has equal performance across sexes, whereas the limited model is much worse on females" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc5IiB3aWR0aD0iMzk5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <amp-img fallback width="399" height="79" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.png" alt="The complete model has equal performance across sexes, whereas the limited model is much worse on females" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijc5IiB3aWR0aD0iMzk5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer></amp-img> </amp-img></figure> <blockquote> <p>2. Click on one of the datapoints in the middle of the arc. In the datapoint editor, change (applicant_sex_name_Female) to 0, and (applicant_sex_name_Male) to 1. Now run the inference again. How does the model change?</p> </blockquote> <figure class="ml-li"><amp-img width="397" height="85" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.webp" alt="The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg1IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <amp-img fallback width="397" height="85" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.png" alt="The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9Ijg1IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer></amp-img> </amp-img></figure> <blockquote> <p>3. In the Performance and Fairness tab, use the fairness buttons to see the thresholds for the sexes for demographic parity between males and females. How does this change the thresholds for the limited model?</p> -</blockquote> <figure class="ml-li"><amp-img width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.webp" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <amp-img fallback width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.png" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-UzP2pX1qayA" width="480" height="270" layout="responsive" data-videoid="UzP2pX1qayA" title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=UzP2pX1qayA" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=UzP2pX1qayA" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</blockquote> <figure class="ml-li"><amp-img width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.webp" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <amp-img fallback width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.png" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2IiB3aWR0aD0iMzk3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-UzP2pX1qayA" width="480" height="270" layout="responsive" credentials="omit" data-videoid="UzP2pX1qayA" title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=UzP2pX1qayA" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=UzP2pX1qayA" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="m">00</span>:<span class="m">35</span> <span class="n">Start</span> <span class="n">a</span> <span class="n">JupyterLab</span> <span class="n">Notebook</span> <span class="n">instance</span> @@ -79,18 +79,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='UzP2pX1qayA']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab.html b/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab.html index 093e21310..0d8a1f06c 100644 --- a/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab.html +++ b/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,18 +25,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Create and Manage Cloud Resources: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Google-Cloud-Essential-Skills-Challenge-Lab.html b/blog/qwiklabs/Google-Cloud-Essential-Skills-Challenge-Lab.html index 3b503f5d8..cba84a4e2 100644 --- a/blog/qwiklabs/Google-Cloud-Essential-Skills-Challenge-Lab.html +++ b/blog/qwiklabs/Google-Cloud-Essential-Skills-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,18 +27,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Google Cloud Essential Skills: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Implement-DevOps-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Implement-DevOps-in-Google-Cloud-Challenge-Lab.html index 85f188ae3..ce499ecf7 100644 --- a/blog/qwiklabs/Implement-DevOps-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Implement-DevOps-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -65,7 +65,7 @@ git merge canary git push origin master </code></pre></div> </div> </li> <li> <p>Go to the Jenkins user interface, click <strong>Scan Multibranch Pipeline Now</strong> if you want to trigger the build immediately.</p> </li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-pSSA6vlRgtA" width="480" height="270" layout="responsive" data-videoid="pSSA6vlRgtA" title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=pSSA6vlRgtA" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=pSSA6vlRgtA" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-pSSA6vlRgtA" width="480" height="270" layout="responsive" credentials="omit" data-videoid="pSSA6vlRgtA" title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=pSSA6vlRgtA" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=pSSA6vlRgtA" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Lab</span> <span class="n">Overview</span> <span class="m">00</span>:<span class="m">48</span> <span class="n">Review</span> <span class="n">previous</span> <span class="n">Lab</span> <span class="n">Exercise</span> <span class="n">GSP051</span> @@ -93,18 +93,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Implement DevOps in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='pSSA6vlRgtA']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab.html b/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab.html index c4ff9ca02..cf66fd73d 100644 --- a/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab.html +++ b/blog/qwiklabs/Insights-from-Data-with-BigQuery-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -208,7 +208,7 @@ <span class="k">AND</span> <span class="n">country_name</span><span class="o">=</span><span class="s1">'United States of America'</span> <span class="k">GROUP</span> <span class="k">BY</span> <span class="nb">date</span> </code></pre></div> </div> </li> <li>Click on <strong>EXPLORE DATA</strong> > <strong>Explore with Data Studio</strong>.</li> <li>Authorize Data Studio to access BigQuery.</li> <li>You may fail to create a report for the first-time login of Data Studio. Click <strong>+ Blank Report</strong> and accept the Terms of Service. Go back to the BigQuery page and click <strong>Explore with Data Studio</strong> again.</li> <li>In the new Data Studio report, select <strong>Add a chart</strong> > <strong>Time series Chart</strong>.</li> <li>Add <code class="language-plaintext highlighter-rouge">country_cases</code> and <code class="language-plaintext highlighter-rouge">country_deaths</code> to the Metric field.</li> <li>Click <strong>Save</strong> to commit the change.</li> -</ol> <p>If you fail to get the score of this task, remove all data and reports from the Datastudio console before retry.</p> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-3zxclCMoQeM" width="480" height="270" layout="responsive" data-videoid="3zxclCMoQeM" title="GSP787 Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data)" data-vars-video-title="GSP787 Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data)" data-vars-video-url="https://www.youtube.com/watch?v=3zxclCMoQeM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=3zxclCMoQeM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p>If you fail to get the score of this task, remove all data and reports from the Datastudio console before retry.</p> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-3zxclCMoQeM" width="480" height="270" layout="responsive" credentials="omit" data-videoid="3zxclCMoQeM" title="GSP787 Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data)" data-vars-video-title="GSP787 Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data)" data-vars-video-url="https://www.youtube.com/watch?v=3zxclCMoQeM" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=3zxclCMoQeM" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="m">00</span>:<span class="m">30</span> <span class="n">Open</span> <span class="s2">"COVID-19 Open data"</span> <span class="n">public</span> <span class="n">dataset</span> @@ -233,18 +233,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Insights from Data with BigQuery: Challenge Lab (COVID-19 Open Data) | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='3zxclCMoQeM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Integrate-with-Machine-Learning-APIs-Challenge-Lab.html b/blog/qwiklabs/Integrate-with-Machine-Learning-APIs-Challenge-Lab.html index 2a3e0cc93..88f69e93c 100644 --- a/blog/qwiklabs/Integrate-with-Machine-Learning-APIs-Challenge-Lab.html +++ b/blog/qwiklabs/Integrate-with-Machine-Learning-APIs-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -35,7 +35,7 @@ </code></pre></div></div> <p>This line uses the Translation API to translate the non-English text into English.</p> <p><strong>Note</strong>: Make sure that you indent the codes correctly.</p> <h2 id="task-5-identify-the-most-common-non-english-language-used-in-the-signs-in-the-data-set">Task 5: Identify the most common non-English language used in the signs in the data set<a class="anchor-link" href="#task-5-identify-the-most-common-non-english-language-used-in-the-signs-in-the-data-set"><i class="fas fa-link"></i></a></h2> <p>In Task 5, you need to remove the comment characters to enable the line of code in the following part of the script.</p> <figure><amp-img width="730" height="167" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-python-code-init.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2NyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="167" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-python-code-init.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2NyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h3 id="process-the-image-files-using-the-updated-python">Process the image files using the updated Python<a class="anchor-link" href="#process-the-image-files-using-the-updated-python"><i class="fas fa-link"></i></a></h3> <p>Save the changes and then run the modified script file in the Cloud Shell:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">BUCKET</span><span class="o">=</span><span class="nv">$PROJECT</span> python analyze-images.py <span class="nv">$PROJECT</span> <span class="nv">$BUCKET</span> </code></pre></div></div> <p>You should see an output like that:</p> <figure><amp-img width="1256" height="1191" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task3-to-5-python-results.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjExOTEiIHdpZHRoPSIxMjU2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <amp-img fallback width="1256" height="1191" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task3-to-5-python-results.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjExOTEiIHdpZHRoPSIxMjU2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer></amp-img> </amp-img></figure> <h3 id="confirm-that-image-data-has-been-successfully-uploaded-to-bigquery">Confirm that image data has been successfully uploaded to BigQuery<a class="anchor-link" href="#confirm-that-image-data-has-been-successfully-uploaded-to-bigquery"><i class="fas fa-link"></i></a></h3> <p>Go back to the Cloud Console, navigate to <strong>BigQuery</strong>.</p> <p>Preview the table <code class="language-plaintext highlighter-rouge">image_text_detail</code> in the dataset called <code class="language-plaintext highlighter-rouge">image_classification_dataset</code> in your project.</p> <figure><amp-img width="1215" height="506" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-biquery-table-preview.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUwNiIgd2lkdGg9IjEyMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer> <amp-img fallback width="1215" height="506" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-biquery-table-preview.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUwNiIgd2lkdGg9IjEyMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer></amp-img> </amp-img></figure> <p>Confirm that image data has been successfully processed by running the following Query in BigQuery:</p> <pre><code class="language-SQL">SELECT locale,COUNT(locale) as lcount FROM image_classification_dataset.image_text_detail GROUP BY locale ORDER BY lcount DESC -</code></pre> <p>The query results should look like:</p> <figure><amp-img width="653" height="356" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-query-results.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1NiIgd2lkdGg9IjY1MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="653" height="356" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-query-results.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1NiIgd2lkdGg9IjY1MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-kEEqbeqR6og" width="480" height="270" layout="responsive" data-videoid="kEEqbeqR6og" title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=kEEqbeqR6og" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=kEEqbeqR6og" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</code></pre> <p>The query results should look like:</p> <figure><amp-img width="653" height="356" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-query-results.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1NiIgd2lkdGg9IjY1MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="653" height="356" layout="intrinsic" src="/images/posts/qwiklabs/gsp329-task5-query-results.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1NiIgd2lkdGg9IjY1MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-kEEqbeqR6og" width="480" height="270" layout="responsive" credentials="omit" data-videoid="kEEqbeqR6og" title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=kEEqbeqR6og" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=kEEqbeqR6og" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Lab</span> <span class="n">Overview</span> <span class="m">01</span>:<span class="m">56</span> <span class="n">Start</span> <span class="n">Lab</span> @@ -58,18 +58,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Integrate with Machine Learning APIs: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='kEEqbeqR6og']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL.html b/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL.html index 3c4e5c758..2b6075f29 100644 --- a/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL.html +++ b/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -51,18 +51,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Migrate a MySQL Database to Google Cloud SQL | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab.html index f3a139591..45b358047 100644 --- a/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Perform-Foundational-Data-ML-and-AI-Tasks-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -62,7 +62,7 @@ <span class="nt">-d</span> @gvi-request.json <span class="o">></span> task4-gvi.result </code></pre></div> </div> </li> <li> <p>Upload the resulted file to Cloud Storage by running:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gsutil <span class="nb">cp </span>task4-gvi.result gs://<YOUR-PROJECT_ID>-marking/task4-gvi.result </code></pre></div> </div> <p><strong>Replace</strong> <code class="language-plaintext highlighter-rouge"><YOUR-PROJECT_ID></code> with your project ID.</p> </li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-iAGiLYAx7z8" width="480" height="270" layout="responsive" data-videoid="iAGiLYAx7z8" title="GSP323 Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab" data-vars-video-title="GSP323 Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=iAGiLYAx7z8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=iAGiLYAx7z8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-iAGiLYAx7z8" width="480" height="270" layout="responsive" credentials="omit" data-videoid="iAGiLYAx7z8" title="GSP323 Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab" data-vars-video-title="GSP323 Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=iAGiLYAx7z8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=iAGiLYAx7z8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="m">00</span>:<span class="m">38</span> <span class="n">Task1</span>: <span class="n">Run</span> <span class="n">a</span> <span class="n">simple</span> <span class="n">Dataflow</span> <span class="n">job</span> @@ -78,18 +78,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Perform Foundational Data, ML, and AI Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='iAGiLYAx7z8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab.html index 6b7d1e008..020d053ab 100644 --- a/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Perform-Foundational-Infrastructure-Tasks-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -19,7 +19,7 @@ </ol> <table class="table"> <thead> <tr> <th>Field</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>Function to execute</td> <td>thumbnail</td> </tr> <tr> <td>Runtime</td> <td>Node.js 8</td> </tr> <tr> <td>Trigger</td> <td>Cloud Storage</td> </tr> </tbody> </table> <ol start="4"> <li> <p>Copy the given <code class="language-plaintext highlighter-rouge">index.js</code> and <code class="language-plaintext highlighter-rouge">package.json</code> to the dialog.</p> <p>Make sure you replace the text <strong>REPLACE_WITH_YOUR_TOPIC</strong> with the topic you created in task 2, in line 15 of index.js.</p> </li> <li> <p>Upload a JPG or PNG image file to the bucket created in Task 1.</p> <figure><amp-img width="706" height="547" layout="intrinsic" src="/images/posts/qwiklabs/map.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU0NyIgd2lkdGg9IjcwNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="706" height="547" layout="intrinsic" src="/images/posts/qwiklabs/map.jpg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU0NyIgd2lkdGg9IjcwNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> </li> </ol> <h2 id="task-4-remove-the-previous-cloud-engineer">Task 4: Remove the previous cloud engineer<a class="anchor-link" href="#task-4-remove-the-previous-cloud-engineer"><i class="fas fa-link"></i></a></h2> <ol> <li> <p>In the console, click the <strong>Navigation menu</strong> > <strong>I AM</strong>.</p> </li> <li> <p>Find the second user.</p> </li> <li> <p>Click the pencil icon, select <strong>Delete</strong>.</p> </li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>All tasks can be done with the Cloud Console. There should be no difficulty for you to finish them. I think this lab is even simpler than <a href="/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab">Create and Manage Cloud Resources: Challenge Lab</a>.</p> <p><strong>9 credits!</strong> Is this cheating money? I hope this beginner’s guide to Qwiklabs will help you to get started. If you have any additional questions, feel free to ask me in the comments section below.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-5UrQ9D-epG8" width="480" height="270" layout="responsive" data-videoid="5UrQ9D-epG8" title="GSP315 Perform Foundational Infrastructure Tasks in Google Cloud= Challenge Lab" data-vars-video-title="GSP315 Perform Foundational Infrastructure Tasks in Google Cloud= Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=5UrQ9D-epG8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=5UrQ9D-epG8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="summary">Summary<a class="anchor-link" href="#summary"><i class="fas fa-link"></i></a></h2> <p>All tasks can be done with the Cloud Console. There should be no difficulty for you to finish them. I think this lab is even simpler than <a href="/blog/qwiklabs/Getting-Started-Create-and-Manage_Cloud_Resources-Challenge-Lab">Create and Manage Cloud Resources: Challenge Lab</a>.</p> <p><strong>9 credits!</strong> Is this cheating money? I hope this beginner’s guide to Qwiklabs will help you to get started. If you have any additional questions, feel free to ask me in the comments section below.</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-5UrQ9D-epG8" width="480" height="270" layout="responsive" credentials="omit" data-videoid="5UrQ9D-epG8" title="GSP315 Perform Foundational Infrastructure Tasks in Google Cloud= Challenge Lab" data-vars-video-title="GSP315 Perform Foundational Infrastructure Tasks in Google Cloud= Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=5UrQ9D-epG8" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=5UrQ9D-epG8" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">0</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> 🔬 <span class="m">0</span>:<span class="m">35</span> <span class="n">Task</span> <span class="m">1</span>: <span class="n">Create</span> <span class="n">a</span> <span class="n">bucket</span> @@ -35,18 +35,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Perform Foundational Infrastructure Tasks in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='5UrQ9D-epG8']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster.html b/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster.html index 664307220..716d530fa 100644 --- a/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster.html +++ b/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -48,18 +48,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Secure-Workloads-in-Google-Kubernetes-Engine-Challenge-Lab.html b/blog/qwiklabs/Secure-Workloads-in-Google-Kubernetes-Engine-Challenge-Lab.html index ce030147c..342f31ce6 100644 --- a/blog/qwiklabs/Secure-Workloads-in-Google-Kubernetes-Engine-Challenge-Lab.html +++ b/blog/qwiklabs/Secure-Workloads-in-Google-Kubernetes-Engine-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -86,7 +86,7 @@ </ol> <p>Your cluster will start updating its binary authorization settings. Wait until the update finish.</p> <h2 id="task-6-setup-pod-security-policy">Task 6: Setup Pod Security Policy<a class="anchor-link" href="#task-6-setup-pod-security-policy"><i class="fas fa-link"></i></a></h2> <p><strong>Tips:</strong> Review the lab <strong>GSP496</strong> <a data-vars-event-label="https://www.qwiklabs.com/focuses/5158?parent=catalog" href="https://www.qwiklabs.com/focuses/5158?parent=catalog">Hardening Default GKE Cluster Configurations</a> on Qwiklabs to get some ideas about how to deploy the PodSecurityPolicy objects. To learn more, you can find more details from the following documentation:</p> <ul> <li><a data-vars-event-label="https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies" href="https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies">Using PodSecurityPolicies | Kubernetes Engine Documentation</a></li> <li><a data-vars-event-label="https://kubernetes.io/docs/concepts/policy/pod-security-policy/" href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/">Pod Security Policies | Kubernetes</a></li> </ul> <p>The challenge lab provides the following Pod Security Policy demo files for you to use:</p> <ul> <li><code class="language-plaintext highlighter-rouge">psp-restrictive.yaml</code></li> <li><code class="language-plaintext highlighter-rouge">psp-role.yaml</code></li> <li><code class="language-plaintext highlighter-rouge">pop-use.yaml</code></li> </ul> <p>Running the following command to deploy each file:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl apply <span class="nt">-f</span> <filename>.yaml -</code></pre></div></div> <p>Unfortunately, you will fail to delopy <code class="language-plaintext highlighter-rouge">psp-restrictive.yaml</code> and receive the following error message:</p> <figure><amp-img width="1209" height="55" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-no-matches-for-kind-podsecuritypolicy-in-version-extensions-v1beta1.webp" alt="no matches for kind PodSecurityPolicy in version extensions/v1beta1" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU1IiB3aWR0aD0iMTIwOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="1209" height="55" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-no-matches-for-kind-podsecuritypolicy-in-version-extensions-v1beta1.png" alt="no matches for kind PodSecurityPolicy in version extensions/v1beta1" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU1IiB3aWR0aD0iMTIwOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>Open <code class="language-plaintext highlighter-rouge">psp-restrictive.yaml</code> with an editor, and replace <code class="language-plaintext highlighter-rouge">appVersion: extensions/v1beta1</code> with <code class="language-plaintext highlighter-rouge">policy/v1beta1</code>.</p> <p>Save the changes, and run the <code class="language-plaintext highlighter-rouge">kubectl apply</code> command again.</p> <figure><amp-img width="1037" height="144" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-deploy-podsecurity-policy-files.webp" alt="podsecuritypolicy.policy, rolebinding.rbac.authorization.k8s.io, clusterrole.rbac.authorization.k8s.io created" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE0NCIgd2lkdGg9IjEwMzciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer> <amp-img fallback width="1037" height="144" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-deploy-podsecurity-policy-files.png" alt="podsecuritypolicy.policy, rolebinding.rbac.authorization.k8s.io, clusterrole.rbac.authorization.k8s.io created" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE0NCIgd2lkdGg9IjEwMzciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer></amp-img> </amp-img></figure> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-bpeOjFZklpg" width="480" height="270" layout="responsive" data-videoid="bpeOjFZklpg" title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=bpeOjFZklpg" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=bpeOjFZklpg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</code></pre></div></div> <p>Unfortunately, you will fail to delopy <code class="language-plaintext highlighter-rouge">psp-restrictive.yaml</code> and receive the following error message:</p> <figure><amp-img width="1209" height="55" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-no-matches-for-kind-podsecuritypolicy-in-version-extensions-v1beta1.webp" alt="no matches for kind PodSecurityPolicy in version extensions/v1beta1" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU1IiB3aWR0aD0iMTIwOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="1209" height="55" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-no-matches-for-kind-podsecuritypolicy-in-version-extensions-v1beta1.png" alt="no matches for kind PodSecurityPolicy in version extensions/v1beta1" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU1IiB3aWR0aD0iMTIwOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>Open <code class="language-plaintext highlighter-rouge">psp-restrictive.yaml</code> with an editor, and replace <code class="language-plaintext highlighter-rouge">appVersion: extensions/v1beta1</code> with <code class="language-plaintext highlighter-rouge">policy/v1beta1</code>.</p> <p>Save the changes, and run the <code class="language-plaintext highlighter-rouge">kubectl apply</code> command again.</p> <figure><amp-img width="1037" height="144" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-deploy-podsecurity-policy-files.webp" alt="podsecuritypolicy.policy, rolebinding.rbac.authorization.k8s.io, clusterrole.rbac.authorization.k8s.io created" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE0NCIgd2lkdGg9IjEwMzciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer> <amp-img fallback width="1037" height="144" layout="intrinsic" src="/images/posts//qwiklabs/gsp335-task6-deploy-podsecurity-policy-files.png" alt="podsecuritypolicy.policy, rolebinding.rbac.authorization.k8s.io, clusterrole.rbac.authorization.k8s.io created" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE0NCIgd2lkdGg9IjEwMzciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIi8+"></i-amphtml-sizer></amp-img> </amp-img></figure> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-bpeOjFZklpg" width="480" height="270" layout="responsive" credentials="omit" data-videoid="bpeOjFZklpg" title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=bpeOjFZklpg" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=bpeOjFZklpg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Task0</span>: <span class="n">Download</span> <span class="n">the</span> <span class="n">necessary</span> <span class="n">files</span> <span class="m">00</span>:<span class="m">19</span> <span class="n">Task1</span>: <span class="n">Setup</span> <span class="n">Cluster</span> @@ -113,18 +113,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='bpeOjFZklpg']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Set-up-and-Configure-a-Cloud-Environment-in-Google-Cloud-Challenge-Lab.html b/blog/qwiklabs/Set-up-and-Configure-a-Cloud-Environment-in-Google-Cloud-Challenge-Lab.html index 838927b8b..45893ea2b 100644 --- a/blog/qwiklabs/Set-up-and-Configure-a-Cloud-Environment-in-Google-Cloud-Challenge-Lab.html +++ b/blog/qwiklabs/Set-up-and-Configure-a-Cloud-Environment-in-Google-Cloud-Challenge-Lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -46,7 +46,7 @@ </ol> <h2 id="task-8-enable-monitoring">Task 8: Enable monitoring<a class="anchor-link" href="#task-8-enable-monitoring"><i class="fas fa-link"></i></a></h2> <ol> <li>Go back to the Cloud Console, and navigate to <strong>Monitoring</strong>.</li> <li>In the Monitoring console, click <strong>Uptime checks</strong> in the left pane.</li> <li>Click <strong>CREATE UPTIME CHECK</strong>.</li> <li> <p>Configure using the following parameters:</p> <table> <thead> <tr> <th>Field</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>Title</td> <td><code class="language-plaintext highlighter-rouge">WordPress Uptime</code></td> </tr> <tr> <td>Check Type</td> <td><code class="language-plaintext highlighter-rouge">HTTP</code></td> </tr> <tr> <td>Resource Type</td> <td><code class="language-plaintext highlighter-rouge">URL</code></td> </tr> <tr> <td>Hostname</td> <td><code class="language-plaintext highlighter-rouge">YOUR-WORDPRESS_ENDPOINT</code></td> </tr> <tr> <td>Path</td> <td><code class="language-plaintext highlighter-rouge">/</code></td> </tr> </tbody> </table> <figure class="ml-li text-center"><amp-img width="567" height="534" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp321-uptime-check.webp" alt="new GCP uptime checks monitoring" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUzNCIgd2lkdGg9IjU2NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="567" height="534" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp321-uptime-check.jpg" alt="new GCP uptime checks monitoring" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUzNCIgd2lkdGg9IjU2NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> </li> </ol> <ol start="5"> <li>Click <strong>TEST</strong>.</li> <li>Click <strong>SAVE</strong> if there is no error.</li> </ol> <h2 id="task-9-provide-access-for-an-additional-engineer">Task 9: Provide access for an additional engineer<a class="anchor-link" href="#task-9-provide-access-for-an-additional-engineer"><i class="fas fa-link"></i></a></h2> <ol> <li>In the Cloud Console, navigate to <strong>IAM & Admin</strong> > <strong>IAM</strong>.</li> <li>Click <strong>+ADD</strong>.</li> <li>In the Add members to … pane, copy and paste the <strong>second user account</strong> for the lab to the <strong>New members</strong> field.</li> <li>In the Role dropdown, select <strong>Project</strong> > <strong>Editor</strong>.</li> <li>Click <strong>SAVE</strong>.</li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-p3jUogiOQqk" width="480" height="270" layout="responsive" data-videoid="p3jUogiOQqk" title="GSP321 Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab (Revised Ed.)" data-vars-video-title="GSP321 Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab (Revised Ed.)" data-vars-video-url="https://www.youtube.com/watch?v=p3jUogiOQqk" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=p3jUogiOQqk" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-p3jUogiOQqk" width="480" height="270" layout="responsive" credentials="omit" data-videoid="p3jUogiOQqk" title="GSP321 Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab (Revised Ed.)" data-vars-video-title="GSP321 Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab (Revised Ed.)" data-vars-video-url="https://www.youtube.com/watch?v=p3jUogiOQqk" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=p3jUogiOQqk" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Lab</span> <span class="n">start</span> <span class="n">and</span> <span class="n">provisioning</span> <span class="m">01</span>:<span class="m">06</span> <span class="n">Create</span> <span class="n">development</span> <span class="n">VPC</span> <span class="n">manually</span> @@ -71,18 +71,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Set up and Configure a Cloud Environment in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='p3jUogiOQqk']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Useful-Google-Cloud-Platform-Commands-Cheat-Sheet.html b/blog/qwiklabs/Useful-Google-Cloud-Platform-Commands-Cheat-Sheet.html index ddfede747..70ec75c96 100644 --- a/blog/qwiklabs/Useful-Google-Cloud-Platform-Commands-Cheat-Sheet.html +++ b/blog/qwiklabs/Useful-Google-Cloud-Platform-Commands-Cheat-Sheet.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -80,18 +80,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Useful Google Cloud Platform Commands Cheat Sheet (15 Practical Tips)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/Userscript-for-Labelling-Completed-Qwiklabs.html b/blog/qwiklabs/Userscript-for-Labelling-Completed-Qwiklabs.html index d5123499a..f11a71ec0 100644 --- a/blog/qwiklabs/Userscript-for-Labelling-Completed-Qwiklabs.html +++ b/blog/qwiklabs/Userscript-for-Labelling-Completed-Qwiklabs.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,18 +25,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Userscript for Qwiklabs Lab Completion Tracking v2.0" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab.html b/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab.html index 68c86d3c2..1cf435b37 100644 --- a/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab.html +++ b/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -103,7 +103,7 @@ <span class="k">FROM</span> <span class="nv">`oxford_policy_tracker.<YOUR_TABLE_NAME>`</span> <span class="k">WHERE</span> <span class="n">country_area</span> <span class="k">IS</span> <span class="k">NULL</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">country_name</span> <span class="k">ASC</span> -</code></pre></div></div> <p>Replace <code class="language-plaintext highlighter-rouge"><YOUR_DATASET_ID></code> and <code class="language-plaintext highlighter-rouge"><NEW_TABLE_NAME></code> with your dataset ID and table name, and run the query. The result should be:</p> <figure class="text-center"><amp-img width="556" height="459" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-task6-union-result-v2.webp" alt="Output of Union ALL" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ1OSIgd2lkdGg9IjU1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="556" height="459" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-task6-union-result-v2.png" alt="Output of Union ALL" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ1OSIgd2lkdGg9IjU1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-C49jYtIMAsg" width="480" height="270" layout="responsive" data-videoid="C49jYtIMAsg" title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-url="https://www.youtube.com/watch?v=C49jYtIMAsg" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=C49jYtIMAsg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</code></pre></div></div> <p>Replace <code class="language-plaintext highlighter-rouge"><YOUR_DATASET_ID></code> and <code class="language-plaintext highlighter-rouge"><NEW_TABLE_NAME></code> with your dataset ID and table name, and run the query. The result should be:</p> <figure class="text-center"><amp-img width="556" height="459" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-task6-union-result-v2.webp" alt="Output of Union ALL" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ1OSIgd2lkdGg9IjU1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="556" height="459" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-task6-union-result-v2.png" alt="Output of Union ALL" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ1OSIgd2lkdGg9IjU1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-C49jYtIMAsg" width="480" height="270" layout="responsive" credentials="omit" data-videoid="C49jYtIMAsg" title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-url="https://www.youtube.com/watch?v=C49jYtIMAsg" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=C49jYtIMAsg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: <span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> <span class="n">and</span> <span class="n">Overview</span> <span class="m">00</span>:<span class="m">22</span> <span class="n">Task</span> <span class="m">1</span>: <span class="n">Create</span> <span class="n">a</span> <span class="n">table</span> <span class="n">partitioned</span> <span class="n">by</span> <span class="n">date</span> @@ -122,18 +122,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='C49jYtIMAsg']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/ensure-access-and-identity-in-google-cloud-challenge-lab.html b/blog/qwiklabs/ensure-access-and-identity-in-google-cloud-challenge-lab.html index ae02e4164..0caa557c8 100644 --- a/blog/qwiklabs/ensure-access-and-identity-in-google-cloud-challenge-lab.html +++ b/blog/qwiklabs/ensure-access-and-identity-in-google-cloud-challenge-lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -61,7 +61,7 @@ </code></pre></div> </div> </li> <li> <p>Finally, run the following to expose the application using a load balancer service with mapping from port 80 to 8080:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl expose deployment hello-server <span class="nt">--name</span> orca-hello-service <span class="se">\</span> <span class="nt">--type</span> LoadBalancer <span class="nt">--port</span> 80 <span class="nt">--target-port</span> 8080 </code></pre></div> </div> <p><strong>Useful documentation:</strong> <a data-vars-event-label="https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps#using_kubectl_expose_to_create_a_service" href="https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps#using_kubectl_expose_to_create_a_service"><em>Using kubectl expose to create a Service</em> | Kubernetes Engine Documentation</a></p> </li> -</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-HiFMZGDBzZo" width="480" height="270" layout="responsive" data-videoid="HiFMZGDBzZo" title="GSP342 Ensure Access & Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-title="GSP342 Ensure Access & Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-url="https://www.youtube.com/watch?v=HiFMZGDBzZo" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=HiFMZGDBzZo" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-HiFMZGDBzZo" width="480" height="270" layout="responsive" credentials="omit" data-videoid="HiFMZGDBzZo" title="GSP342 Ensure Access & Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-title="GSP342 Ensure Access & Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-url="https://www.youtube.com/watch?v=HiFMZGDBzZo" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=HiFMZGDBzZo" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="m">00</span>:<span class="m">00</span> <span class="n">Overview</span> & <span class="n">Challenge</span> <span class="n">scenario</span> <span class="m">00</span>:<span class="m">47</span> <span class="n">Inspect</span> <span class="n">provisioned</span> <span class="n">resources</span> <span class="m">01</span>:<span class="m">12</span> <span class="n">Set</span> <span class="n">default</span> <span class="n">zone</span> <span class="n">according</span> <span class="n">to</span> <span class="n">the</span> <span class="n">region</span> <span class="n">of</span> <span class="n">orca</span>-<span class="n">build</span>-<span class="n">subnet</span> @@ -79,18 +79,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Ensure Access & Identity in Google Cloud: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='HiFMZGDBzZo']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/optimize-costs-for-google-kubernetes-engine-challenge-lab.html b/blog/qwiklabs/optimize-costs-for-google-kubernetes-engine-challenge-lab.html index 501380859..80c8c667c 100644 --- a/blog/qwiklabs/optimize-costs-for-google-kubernetes-engine-challenge-lab.html +++ b/blog/qwiklabs/optimize-costs-for-google-kubernetes-engine-challenge-lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -60,7 +60,7 @@ </ol> <ol start="4"> <li> <p>To test the autoscalers, run the following to perform a load test to simulate the traffic surge.</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>kubectl <span class="nb">exec</span> <span class="si">$(</span>kubectl get pod <span class="nt">--namespace</span><span class="o">=</span>dev | <span class="nb">grep</span> <span class="s1">'loadgenerator'</span> | <span class="nb">cut</span> <span class="nt">-f1</span> <span class="nt">-d</span> <span class="s1">' '</span><span class="si">)</span> <span class="se">\</span> <span class="nt">-it</span> <span class="nt">--namespace</span><span class="o">=</span>dev <span class="nt">--</span> bash <span class="nt">-c</span> <span class="s2">"export USERS=8000; sh ./loadgen.sh"</span> </code></pre></div> </div> <p>The command produces traffic on the store from a <code class="language-plaintext highlighter-rouge">loadgenerator</code> pod with a high number of concurrent users.</p> </li> <li> <p>Navigate to the OVERVIEW tab of the <strong>frontend deployment</strong>, you should see a sharp increase in CPU, Memory, and Disk utilization after the load test started.</p> <figure class="ml-li"><amp-img width="624" height="302" layout="intrinsic" src="/images/posts/qwiklabs/gsp343-task4-monitoring-traffic-spike.webp" alt="High CPU, Memory and Disk utilization yielded by traffic spike" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjYyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="624" height="302" layout="intrinsic" src="/images/posts/qwiklabs/gsp343-task4-monitoring-traffic-spike.png" alt="High CPU, Memory and Disk utilization yielded by traffic spike" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjYyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>Scroll to the <strong>Managed Pods</strong> section, you should observe the number of pods increases by the horizontal pod autoscaling.</p> <figure class="ml-li"><amp-img width="624" height="302" layout="intrinsic" src="/images/posts/qwiklabs/gsp343-task4-cluster-autoscaling-frontend-pods.webp" alt="The frontend pods increase with horizontal pod autoscaling" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjYyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="624" height="302" layout="intrinsic" src="/images/posts/qwiklabs/gsp343-task4-cluster-autoscaling-frontend-pods.png" alt="The frontend pods increase with horizontal pod autoscaling" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjYyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> </li> -</ol> <p>Eventually, you will also see new nodes initiate by the cluster autoscaling. But you need to keep patient for a while.</p> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-jeB-FIeGKkQ" width="480" height="270" layout="responsive" data-videoid="jeB-FIeGKkQ" title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=jeB-FIeGKkQ" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=jeB-FIeGKkQ" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p>Eventually, you will also see new nodes initiate by the cluster autoscaling. But you need to keep patient for a while.</p> <p><br></p> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-jeB-FIeGKkQ" width="480" height="270" layout="responsive" credentials="omit" data-videoid="jeB-FIeGKkQ" title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=jeB-FIeGKkQ" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=jeB-FIeGKkQ" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱ <span class="n">Timestamps</span> <span class="m">0</span>:<span class="m">00</span> <span class="n">Challenge</span> <span class="n">Scenario</span> <span class="m">0</span>:<span class="m">11</span> <span class="n">Task1</span>: <span class="n">Create</span> <span class="n">our</span> <span class="n">cluster</span> <span class="n">and</span> <span class="n">deploy</span> <span class="n">our</span> <span class="n">app</span> @@ -77,18 +77,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Optimize Costs for Google Kubernetes Engine: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='jeB-FIeGKkQ']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/qwiklab-completion-tracker-versions.html b/blog/qwiklabs/qwiklab-completion-tracker-versions.html index d7be2827a..139ac0c6c 100644 --- a/blog/qwiklabs/qwiklab-completion-tracker-versions.html +++ b/blog/qwiklabs/qwiklab-completion-tracker-versions.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -24,7 +24,7 @@ </ul> <hr> <h2 id="for-v048-or-earlier">For v0.4.8 or Earlier<a class="anchor-link" href="#for-v048-or-earlier"><i class="fas fa-link"></i></a></h2> <ul> <li>Each catalog item compares with the manually labelled array data storing within the userscript.</li> <li> <p>Label the completed labs and quests with a green check-circle (<i class="fa fa-check-circle" style="color:green"></i>) at the end of their titles.</p> <figure class="text-center"><amp-img width="730" height="576" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-catalog-page-old.webp" alt="Green Check Mark and Highlight displays on Qwiklabs Catalog Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU3NiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="576" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-catalog-page-old.png" alt="Green Check Mark and Highlight displays on Qwiklabs Catalog Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU3NiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Effects on the Qwiklabs catalog page (For version < 0.4.5)</figcaption></figure> </li> </ul> <h3 id="v048---support-tracking-home-and-my-learning-pages">v0.4.8 - Support Tracking “Home” and “My Learning” Pages<a class="anchor-link" href="#v048---support-tracking-home-and-my-learning-pages"><i class="fas fa-link"></i></a></h3> <p><small><i class="fas fa-calendar-day fa-sm"></i> <time datetime="2020-06-06">2020-06-06</time></small></p> <ul> <li>Add <strong>NEW</strong> badges and yellow highlights to any unregistered labs and quests.</li> <li>Apply the color scheme to the short tables of the “Completed Courses” and “Completed Labs” pages on the <strong>My Learning</strong> page.</li> <li>Apply the annotation scheme to the “Your Favorites”, “Featured Learning”, and “What’s Hots” sections on the <strong>Home</strong> page.</li> </ul> <h3 id="v045">v0.4.5<a class="anchor-link" href="#v045"><i class="fas fa-link"></i></a></h3> <p><small><i class="fas fa-calendar-day fa-sm"></i> <time datetime="2020-05-20">2020-05-20</time></small></p> <ul> <li>Add green highlight to the titles of completed labs and quests.</li> <li>Add annotations to Your Favorites in the <strong>My Learning</strong> page.</li> <li>Add color backgrounds to each row in tables of the <strong>Completed Courses</strong> and <strong>Completed Labs</strong> pages.</li> <li>Change to use JSON-markup for storing lab and quest data.</li> -</ul> <p>The <strong>version 0.4.5</strong> start covering the “<em>Completed Courses</em>” and “<em>Completed Labs</em>” pages under the <strong>My Learning</strong> section. Since the quests mix with speedrun games in the list of completed courses, each row of the game records highlights in purple color for distinguishing them.</p> <div class="row"> <figure class="col-md-6 text-center mb-4"><amp-img width="730" height="339" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-courses-table.webp" alt="Markers and Highlights on Completed Courses" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzOSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="339" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-courses-table.png" alt="Markers and Highlights on Completed Courses" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzOSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Effects on the <i>Completed Courses</i> page (For version >= 0.4.5)</figcaption></figure> <figure class="col-md-6 text-center mb-4"><amp-img width="730" height="337" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-labs-table.webp" alt="Markers and Highlights on Completed Labs pages" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="337" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-labs-table.png" alt="Markers and Highlights on Completed Labs pages" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Effects on the <i>Completed Labs</i> page (For version >= 0.4.5)</figcaption></figure> </div> <hr> <div class="clearfix"></div> </div> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/userscript/">Userscript</a></small> </li></ul> </div> <div class="row PageNavigation mt-4 prevnextlinks"><div class="col-md-6 rightborder pl-0"> <a class="thepostlink" href="/blog/matlab/matlab-packages-and-toolboxes">« My MATLAB Package and Toolbox Picks</a> </div></div> <div class="row post-top-meta"> <div class="col-md-2"> <amp-img class="author-thumb i-amphtml-layout-fixed i-amphtml-layout-size-defined" width="72" height="72" src="https://www.gravatar.com/avatar/abd876486b2caa54b43bf64a5a86f620?s=250&d=mm&r=x" alt="Chris F." style="width:72px;height:72px;" i-amphtml-layout="fixed"></amp-img> </div> <div class="col-md-10"> <a class="link-dark" href="https://en.gravatar.com/chrisfungky" rel="noopener" target="_blank">Chris F.</a><a href="https://www.facebook.com/chriskyfung/" class="btn follow" rel="noopener" target="_blank">Follow</a> <span class="author-description">Author of this blog, M.Phil.</span> </div> </div> <section> <div id="comments"><div class="disqus"> <amp-iframe width="600" height="580" layout="responsive" data-block-on-consent-purposes="functional" sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-forms" resizable src="https://chriskyfung.gitlab.io/disqus-amp/?url=https://chriskyfung.github.io/blog/qwiklabs/qwiklab-completion-tracker-versions&title='Qwiklabs+Lab+Completion+Tracker+-+Version+History'" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:96.6667%"></i-amphtml-sizer> <div overflow style="background-color: #0003;display: block;position: relative;"> <button class="btn btn-dark" aria-label="Load more comments" tabindex="0" style="margin: .5em 50%; transform: translateX(-50%);"> Load more </button> </div> <div placeholder>Loading Disqus Comments...</div> <div fallback> Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a> </div> </amp-iframe> +</ul> <p>The <strong>version 0.4.5</strong> start covering the “<em>Completed Courses</em>” and “<em>Completed Labs</em>” pages under the <strong>My Learning</strong> section. Since the quests mix with speedrun games in the list of completed courses, each row of the game records highlights in purple color for distinguishing them.</p> <div class="row"> <figure class="col-md-6 text-center mb-4"><amp-img width="730" height="339" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-courses-table.webp" alt="Markers and Highlights on Completed Courses" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzOSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="339" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-courses-table.png" alt="Markers and Highlights on Completed Courses" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzOSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Effects on the <i>Completed Courses</i> page (For version >= 0.4.5)</figcaption></figure> <figure class="col-md-6 text-center mb-4"><amp-img width="730" height="337" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-labs-table.webp" alt="Markers and Highlights on Completed Labs pages" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="337" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-labs-table.png" alt="Markers and Highlights on Completed Labs pages" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzNyIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Effects on the <i>Completed Labs</i> page (For version >= 0.4.5)</figcaption></figure> </div> <hr> <div class="clearfix"></div> </div> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/changelog/">Changelog</a></small> </li><li> <small><a href="/tag/qwiklabs/">Qwiklabs</a></small> </li><li> <small><a href="/tag/userscript/">Userscript</a></small> </li></ul> </div> <div class="row PageNavigation mt-4 prevnextlinks"><div class="col-md-6 rightborder pl-0"> <a class="thepostlink" href="/blog/matlab/matlab-packages-and-toolboxes">« My MATLAB Package and Toolbox Picks</a> </div><div class="col-md-6 text-right pr-0"> <a class="thepostlink" href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command »</a> </div></div> <div class="row post-top-meta"> <div class="col-md-2"> <amp-img class="author-thumb i-amphtml-layout-fixed i-amphtml-layout-size-defined" width="72" height="72" src="https://www.gravatar.com/avatar/abd876486b2caa54b43bf64a5a86f620?s=250&d=mm&r=x" alt="Chris F." style="width:72px;height:72px;" i-amphtml-layout="fixed"></amp-img> </div> <div class="col-md-10"> <a class="link-dark" href="https://en.gravatar.com/chrisfungky" rel="noopener" target="_blank">Chris F.</a><a href="https://www.facebook.com/chriskyfung/" class="btn follow" rel="noopener" target="_blank">Follow</a> <span class="author-description">Author of this blog, M.Phil.</span> </div> </div> <section> <div id="comments"><div class="disqus"> <amp-iframe width="600" height="580" layout="responsive" data-block-on-consent-purposes="functional" sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-forms" resizable src="https://chriskyfung.gitlab.io/disqus-amp/?url=https://chriskyfung.github.io/blog/qwiklabs/qwiklab-completion-tracker-versions&title='Qwiklabs+Lab+Completion+Tracker+-+Version+History'" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:96.6667%"></i-amphtml-sizer> <div overflow style="background-color: #0003;display: block;position: relative;"> <button class="btn btn-dark" aria-label="Load more comments" tabindex="0" style="margin: .5em 50%; transform: translateX(-50%);"> Load more </button> </div> <div placeholder>Loading Disqus Comments...</div> <div fallback> Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a> </div> </amp-iframe> </div></div> </section> </div> <div class="col-md-4 col-lg-4 right-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> @@ -33,18 +33,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Qwiklabs Lab Completion Tracker - Version History" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform.html b/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform.html index d7852d8e6..e1addfc84 100644 --- a/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform.html +++ b/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -14,7 +14,7 @@ <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <h1 class="posttitle">Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)</h1> </div> <amp-img data-hero class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="410" layout="responsive" src="/images/posts/qwiklabs/qwiklabs-badges.webp" alt="Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.1644%"></i-amphtml-sizer> <amp-img data-hero fallback class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="410" layout="responsive" src="/images/posts/qwiklabs/qwiklabs-badges.jpg" alt="Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.1644%"></i-amphtml-sizer><img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" src="/images/posts/qwiklabs/qwiklabs-badges.jpg"></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" src="/images/posts/qwiklabs/qwiklabs-badges.webp"></amp-img> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-02-22T22:10:00+08:00" itemprop="datePublished" title="Published on">22 Feb 2020</time> | <i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-06-20T23:36:00+08:00" itemprop="dateModified" title="Updated on">20 Jun 2020</time></div> </small> </p> <div class="article-post"><aside style="position: relative;"> <a href="#toc-skipped" class="screen-reader-only">Skip table of contents</a> </aside> <h2 class="no_toc" id="table-of-contents">Table of Contents</h2> <ul id="markdown-toc"> <li><a href="#what-is-qwiklabs" id="markdown-toc-what-is-qwiklabs">What is Qwiklabs</a></li> <li><a href="#visual-map-of-qwiklabs-gcp-quests" id="markdown-toc-visual-map-of-qwiklabs-gcp-quests">Visual Map of Qwiklabs GCP Quests</a></li> <li><a href="#custom-tool-for-labelling-completed-labs-and-quests" id="markdown-toc-custom-tool-for-labelling-completed-labs-and-quests">Custom Tool for Labelling Completed Labs and Quests</a></li> <li><a href="#tips-for-preparing-a-lab" id="markdown-toc-tips-for-preparing-a-lab">Tips for Preparing a Lab</a></li> <li><a href="#see-also-" id="markdown-toc-see-also-">See Also 📚</a></li> -</ul> <aside id="toc-skipped"></aside> <h2 id="what-is-qwiklabs">What is Qwiklabs<a class="anchor-link" href="#what-is-qwiklabs"><i class="fas fa-link"></i></a></h2> <p><a data-vars-event-label="https://www.qwiklabs.com" href="https://www.qwiklabs.com">Qwiklabs</a> is a great online self-paced learning platform for getting hands-on experience of the Google Cloud Platform. It has over 400 hands-on labs and quests to learn and practice. If you are not familiar with Qwiklabs, I suggest you watch this video made by Google Cloud Team to get a rough idea about using Qwiklabs for Hands-on Practice with Google Cloud.</p> <amp-youtube id="yt-cyp7soKLOYI" width="480" height="270" layout="responsive" data-videoid="cyp7soKLOYI" title="Using Qwiklabs for Hands-on Practice with Google Cloud | Google Cloud Labs" data-vars-video-title="Using Qwiklabs for Hands-on Practice with Google Cloud | Google Cloud Labs" data-vars-video-url="https://www.youtube.com/watch?v=cyp7soKLOYI" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=cyp7soKLOYI" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ul> <aside id="toc-skipped"></aside> <h2 id="what-is-qwiklabs">What is Qwiklabs<a class="anchor-link" href="#what-is-qwiklabs"><i class="fas fa-link"></i></a></h2> <p><a data-vars-event-label="https://www.qwiklabs.com" href="https://www.qwiklabs.com">Qwiklabs</a> is a great online self-paced learning platform for getting hands-on experience of the Google Cloud Platform. It has over 400 hands-on labs and quests to learn and practice. If you are not familiar with Qwiklabs, I suggest you watch this video made by Google Cloud Team to get a rough idea about using Qwiklabs for Hands-on Practice with Google Cloud.</p> <amp-youtube id="yt-cyp7soKLOYI" width="480" height="270" layout="responsive" credentials="omit" data-videoid="cyp7soKLOYI" title="Using Qwiklabs for Hands-on Practice with Google Cloud | Google Cloud Labs" data-vars-video-title="Using Qwiklabs for Hands-on Practice with Google Cloud | Google Cloud Labs" data-vars-video-url="https://www.youtube.com/watch?v=cyp7soKLOYI" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=cyp7soKLOYI" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <p><br></p> <p>After you logged in to Qwiklabs, you can see there are five training categories, i.e.</p> <ul> <li>Infrastructure & DevOps</li> <li>Websites & App Dev</li> <li>Big Data</li> <li>Machine Learning</li> <li>Security, Backup & Recovery</li> </ul> <figure><amp-img width="730" height="468" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-default-catagories.webp" alt="Five default training catagories defined by Qwiklabs" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="468" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-default-catagories.png" alt="Five default training catagories defined by Qwiklabs" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>You can start your training based on your goal and purpose, or find the quests for GCP using the filter function available on the Catalog page. Qwiklabs grouped different kinds of labs into 56 quests for learning GCP, and divided them to 4 levels: Introductory, Fundamental, Advanced, and Expert. You may also look for the resources by search, but the results are sorted by relevance rather than an appropriate order for study or learning. As a result, I tried to organise the Qwiklabs quests to be a learning map to trace the connections among them.</p> <figure><amp-img width="730" height="621" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-catalog-with-quest-filter-for-gcp.webp" alt="Using filter to find quests for Google Cloud Platform on Qwiklabs Catalog page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjYyMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="621" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-catalog-with-quest-filter-for-gcp.png" alt="Using filter to find quests for Google Cloud Platform on Qwiklabs Catalog page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjYyMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h2 id="visual-map-of-qwiklabs-gcp-quests">Visual Map of Qwiklabs GCP Quests<a class="anchor-link" href="#visual-map-of-qwiklabs-gcp-quests"><i class="fas fa-link"></i></a></h2> <p>I spent about three months to take all the Qwiklabs quests for Google Cloud Platform. In the end, I think that there is a need to create a visual map to indicate and understand the relationships between the quests, thereby an easier way for any beginner to seek their desired learning paths. I illustrated the following map by connecting the blocks based on the quest descriptions. You can navigate in the map and click on the boxes to open the corresponding quest webpages.</p> <div class="box-highlight"> <p class="text-center">Learning map for Qwiklabs GCP Quests (keep update)</p> @@ -25,7 +25,7 @@ </button> </div> <amp-lightbox scrollable id="amp-largemap" layout="nodisplay" animate-in="fade-in" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <div class="iframe-bg-white"> <button type="button" class="close" tabindex="-1" on="tap:amp-largemap.close">×</button> <amp-iframe width="1493" height="2259" layout="intrinsic" frameborder="0" sandbox="allow-scripts" src="/images/projects/qwiklabs-quests-map.svg" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIyNTkiIHdpZHRoPSIxNDkzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=="></i-amphtml-sizer> <span placeholder class="text-center">Loading...</span> </amp-iframe> </div> </amp-lightbox> <h2 id="custom-tool-for-labelling-completed-labs-and-quests">Custom Tool for Labelling Completed Labs and Quests<a class="anchor-link" href="#custom-tool-for-labelling-completed-labs-and-quests"><i class="fas fa-link"></i></a></h2> <p>As a Qwiklabs user, I found it is messy and damp to lookup unenrolled quests or incompleted labs from the Qwiklabs Catalog page or Search Results (<a data-vars-event-label="https://www.qwiklabs.com/catalog" href="https://www.qwiklabs.com/catalog">www.qwiklabs.com/catalog</a>). I desired to make a straight-forward way to identify the catalog, by adding a green check-circle next to those completed. So, I tried to develop a solution named “<a data-vars-event-label="https://github.com/chriskyfung/qwiklabs-completed-labs-tracker" href="https://github.com/chriskyfung/qwiklabs-completed-labs-tracker">Qwiklabs Lab Completion Tracker</a>”.</p> <p>The prototyped tool can help you visually identify the completed catalogue items with a green check-circle (<i class="fa fa-check-circle" style="color:green"></i>) showing at the end of a lab or quest title. A demo screenshot is shown below.</p> <figure class="text-center mb-4"><amp-img width="730" height="482" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-quest-page-demo.webp" alt="Green Check Marks and Highlights to the completed lab items on a Qwiklabs Quest Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ4MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="482" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-quest-page-demo.png" alt="Green Check Marks and Highlights to the completed lab items on a Qwiklabs Quest Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ4MiIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Fig. Effects on the completed labs on a Quest page (For version >= 0.4.5)</figcaption></figure> <figure class="text-center mb-4"><amp-img width="510" height="345" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-lab-page-demo.webp" alt="Green Check Mark and Highlight displays on a Completed Qwiklabs Lab Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0NSIgd2lkdGg9IjUxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="510" height="345" layout="intrinsic" src="/images/projects/qwiklabs-complete-indicator-lab-page-demo.png" alt="Green Check Mark and Highlight displays on a Completed Qwiklabs Lab Page" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM0NSIgd2lkdGg9IjUxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Fig. Effects on a completed lab page (For version >= 0.4.5)</figcaption></figure> <p>For more information, you can read the post <em>“<a href="/blog/qwiklabs/userscript-for-labelling-completed-qwiklabs">Userscript for Labelling Completed Qwiklabs</a>“</em>.</p> <h2 id="tips-for-preparing-a-lab">Tips for Preparing a Lab<a class="anchor-link" href="#tips-for-preparing-a-lab"><i class="fas fa-link"></i></a></h2> <p>Sometimes, you can find examples and tutorials from the Qwiklabs’ blog on <a data-vars-event-label="https://qwiklabs.medium.com/" href="https://qwiklabs.medium.com/">Medium</a> (<a data-vars-event-label="https://qwiklabs.medium.com/" href="https://qwiklabs.medium.com/">@qwiklabs</a>). Also, you may search for introductive videos from YouTube, such as the <a data-vars-event-label="https://www.youtube.com/channel/UCgadTofKslPYREQE8TjY7AA/videos" href="https://www.youtube.com/channel/UCgadTofKslPYREQE8TjY7AA/videos">Qwiklabs</a> and the <a data-vars-event-label="https://www.youtube.com/user/googlecloudplatform" href="https://www.youtube.com/user/googlecloudplatform">Google Cloud Platform</a> channels. The playlist below includes parts of the videos,</p> -<amp-youtube id="yt-ew-r46FmzSM" width="480" height="270" layout="responsive" data-videoid="ew-r46FmzSM" data-param-listtype="playlist" data-param-list="PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" title="Qwiklabs Quests Previews | Google Cloud Labs" data-vars-video-title="Qwiklabs Quests Previews | Google Cloud Labs" data-vars-video-url="https://www.youtube.com/watch?v=ew-r46FmzSM&list=PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=ew-r46FmzSM&list=PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +<amp-youtube id="yt-ew-r46FmzSM" width="480" height="270" layout="responsive" credentials="omit" data-videoid="ew-r46FmzSM" data-param-listtype="playlist" data-param-list="PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" title="Qwiklabs Quests Previews | Google Cloud Labs" data-vars-video-title="Qwiklabs Quests Previews | Google Cloud Labs" data-vars-video-url="https://www.youtube.com/watch?v=ew-r46FmzSM&list=PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=ew-r46FmzSM&list=PLIivdWyY5sqKOsBSMDTF0M76nXeChgh5D" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <amp-ad width="auto" height="325" type="a9" data-amzn_assoc_placement="adunit0" data-amzn_assoc_search_bar="true" data-amzn_assoc_tracking_id="cfky05-20" data-amzn_assoc_ad_mode="manual" data-amzn_assoc_ad_type="smart" data-amzn_assoc_marketplace="amazon" data-amzn_assoc_region="US" data-amzn_assoc_title="Recommended Books" data-amzn_assoc_linkid="9cf248fb1fbaccac1da576f76533a29c" data-amzn_assoc_asins="1119564417,1491974567,1491962291,B07P5JZCXV" layout="fixed-height" class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:325px;" i-amphtml-layout="fixed-height"> </amp-ad> <h2 id="see-also-">See Also 📚<a class="anchor-link" href="#see-also-"><i class="fas fa-link"></i></a></h2> <p><em>Resources:</em></p> <ul> <li><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet</a></li> </ul> <p><em>The Cookbooks of Challenge Quest Series:</em></p> <figure class="text-center"><a href="/blog/qwiklabs/where-does-my-bear-badge-go"><amp-img width="473" height="188" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-change-badge-for-Challenge-GCP-Architecture-quest.webp" alt="Badges for Challenge-GCP-Architecture: Before and After" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE4OCIgd2lkdGg9IjQ3MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="473" height="188" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-change-badge-for-Challenge-GCP-Architecture-quest.png" alt="Badges for Challenge-GCP-Architecture: Before and After" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE4OCIgd2lkdGg9IjQ3MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></a><figcaption>Badge Change in 2020</figcaption></figure> <ul> <li><a href="/blog/qwiklabs/Google-Cloud-Essential-Skills-Challenge-Lab">☁ Google Cloud Essential Skills: Challenge Lab | logbook </a></li> <li><a href="/blog/qwiklabs/Deploy-a-Compute-Instance-with-a-Remote-Startup-Script">☁ Deploy a Compute Instance with a Remote Startup Script | logbook </a></li> <li><a href="/blog/qwiklabs/Configure-a-Firewall-and-a-Startup-Script-with-Deployment-Manager">☁ Configure a Firewall and a Startup Script with Deployment Manager | logbook </a></li> <li><a href="/blog/qwiklabs/Configure-Windows-Bastion-Host-with-Terraform-on-GCP">☁ Configure Secure RDP using a Windows Bastion Host with Terraform | logbook </a></li> <li><a href="/blog/qwiklabs/Build-and-Deploy-a-Docker-Image-to-a-Kubernetes-Cluster">☁ Build and Deploy a Docker Image to a Kubernetes Cluster | logbook </a></li> <li><a href="/blog/qwiklabs/Scale-Out-and-Update-a-Containerized-Application-on-a-Kubernetes-Cluster">☁ Scale Out and Update a Containerized Application on a Kubernetes Cluster | logbook </a></li> <li><a href="/blog/qwiklabs/Migrate-a-MySQL-Database-to-Google-Cloud-SQL">☁ Migrate a MySQL Database to Google Cloud SQL | logbook </a></li> @@ -41,18 +41,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Learning Google Cloud Platform on Qwiklabs: Learning Map, Assistive Tool and Tips (2020)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='cyp7soKLOYI']","amp-youtube[data-videoid='ew-r46FmzSM']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/serverless-firebase-development-challenge-lab.html b/blog/qwiklabs/serverless-firebase-development-challenge-lab.html index b3305b0d3..30d2d9fd5 100644 --- a/blog/qwiklabs/serverless-firebase-development-challenge-lab.html +++ b/blog/qwiklabs/serverless-firebase-development-challenge-lab.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -69,7 +69,7 @@ <span class="nt">--region</span> us-central1 <span class="se">\</span> <span class="nt">--allow-unauthenticated</span> </code></pre></div> </div> </li> -</ol> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-4rqeFp87s6I" width="480" height="270" layout="responsive" data-videoid="4rqeFp87s6I" title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=4rqeFp87s6I" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=4rqeFp87s6I" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</ol> <p><strong>Congratulations! You completed this challenge lab.</strong></p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video<a class="anchor-link" href="#-demonstration-video"><i class="fas fa-link"></i></a></h2> <amp-youtube id="yt-4rqeFp87s6I" width="480" height="270" layout="responsive" credentials="omit" data-videoid="4rqeFp87s6I" title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=4rqeFp87s6I" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=4rqeFp87s6I" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱ <span class="n">Timestamps</span> <span class="m">00</span>:<span class="m">00</span> <span class="n">Overview</span> <span class="m">00</span>:<span class="m">29</span> <span class="n">Provision</span> <span class="n">the</span> <span class="n">environment</span> @@ -88,18 +88,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in ☁ Serverless Firebase Development: Challenge Lab | logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='4rqeFp87s6I']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/qwiklabs/where-does-my-bear-badge-go.html b/blog/qwiklabs/where-does-my-bear-badge-go.html index cf2a8d872..3649bf994 100644 --- a/blog/qwiklabs/where-does-my-bear-badge-go.html +++ b/blog/qwiklabs/where-does-my-bear-badge-go.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -22,18 +22,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in QMyths: My badge for 'Challenge: GCP Architecture' disappears?!" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/tumblr-tricks/featured-tips-tricks-and-tools-for-tumblr-bloggers.html b/blog/tumblr-tricks/featured-tips-tricks-and-tools-for-tumblr-bloggers.html index 0d3cec2cf..b52003fbf 100644 --- a/blog/tumblr-tricks/featured-tips-tricks-and-tools-for-tumblr-bloggers.html +++ b/blog/tumblr-tricks/featured-tips-tricks-and-tools-for-tumblr-bloggers.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -52,18 +52,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Featured Tips, Tricks, and Tools for Tumblr Bloggers (2019)" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog.html b/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog.html index c12d8fba7..7796aac1e 100644 --- a/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog.html +++ b/blog/tumblr-tricks/how-to-add-a-custom-open-graph-image-tag-to-a-tumblr-blog.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -78,18 +78,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in How to add a custom Open Graph image tag to your tumblr blog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/windows/find-windows10-store-app-path-for-default-program.html b/blog/windows/find-windows10-store-app-path-for-default-program.html index 0757f02c6..ed3c568c6 100644 --- a/blog/windows/find-windows10-store-app-path-for-default-program.html +++ b/blog/windows/find-windows10-store-app-path-for-default-program.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -26,18 +26,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in How to find the installation path of Windows store apps for default program settings in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/blog/windows/fix-windows10-boot-loop-after-fail-upgrade.html b/blog/windows/fix-windows10-boot-loop-after-fail-upgrade.html index d3f5d725b..7b08150a8 100644 --- a/blog/windows/fix-windows10-boot-loop-after-fail-upgrade.html +++ b/blog/windows/fix-windows10-boot-loop-after-fail-upgrade.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -12,7 +12,7 @@ <li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> -</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <h1 class="posttitle">Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041</h1> </div> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> </small> </p> <div class="article-post"><p>Microsoft released the Windows 10 May 2020 update. The most compelling feature is the <a data-vars-event-label="https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10" href="https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10"><strong>Windows Subsystem for Linux version 2 (WSL2)</strong></a>, which uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM).</p> <p>The WSL2 has a faster File IO performance and 100% system call compatibility, compared to the WSL1 <sup id="fnref:vs" role="doc-noteref"><a href="#fn:vs" class="footnote" rel="footnote">1</a></sup>. Program Manager <em>Craig Loewen</em> <sup id="fnref:Craig" role="doc-noteref"><a href="#fn:Craig" class="footnote" rel="footnote">2</a></sup> at Microsoft demonstrated the WSL2 is about 5-6 times faster than the WSL1. He also performed running an app from inside a container using <a data-vars-event-label="https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2" href="https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2">Docker Desktop for Windows</a> and <a data-vars-event-label="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl">debug it using VS Code</a>. It’s great news for developers 👨💻.</p> <p><strong>To enable the WSL2, your operating system must be Windows 10, Version 2004, Build 19041 or higher</strong>.</p> <p>You can find your build number by pressing the <strong>Start</strong> <i class="fab fa-windows"></i> button or <strong>Win + R</strong> keys, and then type in <strong>winver</strong> <sup id="fnref:winver" role="doc-noteref"><a href="#fn:winver" class="footnote" rel="footnote">3</a></sup> and hit the <strong>Enter</strong> key.</p> <figure class="text-center"><amp-img width="460" height="423" layout="intrinsic" src="/images/posts/windows/find-build-number-in-about-windows-10-by-winver.webp" alt="Find Version and Build number in About Windows with winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMyIgd2lkdGg9IjQ2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="460" height="423" layout="intrinsic" src="/images/posts/windows/find-build-number-in-about-windows-10-by-winver.png" alt="Find Version and Build number in About Windows with winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMyIgd2lkdGg9IjQ2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <figure class="text-center"><amp-img width="397" height="203" layout="intrinsic" src="/images/posts/windows/find-windows-10-build-number-in-winver.webp" alt="Find Windows 10 Build Number in winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMyIgd2lkdGg9IjM5NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="397" height="203" layout="intrinsic" src="/images/posts/windows/find-windows-10-build-number-in-winver.png" alt="Find Windows 10 Build Number in winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMyIgd2lkdGg9IjM5NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>It will show the <strong>About Windows</strong> dialog. For example, the above screenshot has a Windows 10, Version 1903, Build 18362. This means an update to Windows 10 May 2020 Update is required. I recommend you to watch the video below, which introduces how to get the update by Windows engineer <em>Savitha Quadros</em>.</p> <amp-youtube id="yt-YtqNzdrtrmw" width="480" height="270" layout="responsive" data-videoid="YtqNzdrtrmw" title="How to get the Windows 10 May 2020 Update" data-vars-video-title="How to get the Windows 10 May 2020 Update" data-vars-video-url="https://www.youtube.com/watch?v=YtqNzdrtrmw" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=YtqNzdrtrmw" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <h1 class="posttitle">Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041</h1> </div> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> </small> </p> <div class="article-post"><p>Microsoft released the Windows 10 May 2020 update. The most compelling feature is the <a data-vars-event-label="https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10" href="https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10"><strong>Windows Subsystem for Linux version 2 (WSL2)</strong></a>, which uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM).</p> <p>The WSL2 has a faster File IO performance and 100% system call compatibility, compared to the WSL1 <sup id="fnref:vs" role="doc-noteref"><a href="#fn:vs" class="footnote" rel="footnote">1</a></sup>. Program Manager <em>Craig Loewen</em> <sup id="fnref:Craig" role="doc-noteref"><a href="#fn:Craig" class="footnote" rel="footnote">2</a></sup> at Microsoft demonstrated the WSL2 is about 5-6 times faster than the WSL1. He also performed running an app from inside a container using <a data-vars-event-label="https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2" href="https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2">Docker Desktop for Windows</a> and <a data-vars-event-label="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl">debug it using VS Code</a>. It’s great news for developers 👨💻.</p> <p><strong>To enable the WSL2, your operating system must be Windows 10, Version 2004, Build 19041 or higher</strong>.</p> <p>You can find your build number by pressing the <strong>Start</strong> <i class="fab fa-windows"></i> button or <strong>Win + R</strong> keys, and then type in <strong>winver</strong> <sup id="fnref:winver" role="doc-noteref"><a href="#fn:winver" class="footnote" rel="footnote">3</a></sup> and hit the <strong>Enter</strong> key.</p> <figure class="text-center"><amp-img width="460" height="423" layout="intrinsic" src="/images/posts/windows/find-build-number-in-about-windows-10-by-winver.webp" alt="Find Version and Build number in About Windows with winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMyIgd2lkdGg9IjQ2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="460" height="423" layout="intrinsic" src="/images/posts/windows/find-build-number-in-about-windows-10-by-winver.png" alt="Find Version and Build number in About Windows with winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMyIgd2lkdGg9IjQ2MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <figure class="text-center"><amp-img width="397" height="203" layout="intrinsic" src="/images/posts/windows/find-windows-10-build-number-in-winver.webp" alt="Find Windows 10 Build Number in winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMyIgd2lkdGg9IjM5NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="397" height="203" layout="intrinsic" src="/images/posts/windows/find-windows-10-build-number-in-winver.png" alt="Find Windows 10 Build Number in winver" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMyIgd2lkdGg9IjM5NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>It will show the <strong>About Windows</strong> dialog. For example, the above screenshot has a Windows 10, Version 1903, Build 18362. This means an update to Windows 10 May 2020 Update is required. I recommend you to watch the video below, which introduces how to get the update by Windows engineer <em>Savitha Quadros</em>.</p> <amp-youtube id="yt-YtqNzdrtrmw" width="480" height="270" layout="responsive" credentials="omit" data-videoid="YtqNzdrtrmw" title="How to get the Windows 10 May 2020 Update" data-vars-video-title="How to get the Windows 10 May 2020 Update" data-vars-video-url="https://www.youtube.com/watch?v=YtqNzdrtrmw" data-param-rel="0" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:56.25%"></i-amphtml-sizer> <div fallback> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=YtqNzdrtrmw" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> </amp-youtube> <p>Open the <strong>Windows Update</strong> from the Control panel. If you see "Download and install" as the screenshot below, your device is ready for the update. You can click on it to run the process in the background. The updater will ask you to reboot your device when it finishes the job. 🥳👏</p> <figure class="text-center"><amp-img width="730" height="388" layout="intrinsic" src="/images/posts/windows/windows-10-feature-update-2004.webp" alt="Windows Update - Feature update to Windows 10, version 2004" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="388" layout="intrinsic" src="/images/posts/windows/windows-10-feature-update-2004.png" alt="Windows Update - Feature update to Windows 10, version 2004" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4OCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Device is ready for update</figcaption></figure> <h2 id="do-not-try-to-force-update-your-windows-10">DO NOT Try To Force Update Your Windows 10<a class="anchor-link" href="#do-not-try-to-force-update-your-windows-10"><i class="fas fa-link"></i></a></h2> <p>However, you may see the warning sign as shown in the screenshot below. This indicates that it will have issues during updating or starting. Click on the "<a data-vars-event-label="https://docs.microsoft.com/en-us/windows/release-health/release-information" href="https://docs.microsoft.com/en-us/windows/release-health/release-information" title="https://docs.microsoft.com/en-us/windows/release-information/status-windows-10-2004">Learn more</a>" button in the Windows Update settings. One of my PCs associates with that. I tried to work around by downloading the ISO image file and manually update the Windows from a USB drive. <em>BOOM!…</em> 💥 I crash my operation system. Thus, I don’t recommend you force update your Windows 10 to the new build.</p> <figure class="text-center"><amp-img width="730" height="394" layout="intrinsic" src="/images/posts/windows/windows-10-feature-update-2004-but-your-device-is-not-quite-ready.webp" alt="Windows Update - Feature update to Windows 10, version 2004. The Windows 10 May 2020 Update is on its way. We’re offering this update to compatible devices, but your device isn’t quite ready for it. Once your device is ready, you’ll see the update available on this page. There’s nothing you need to do at this time." on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5NCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="394" layout="intrinsic" src="/images/posts/windows/windows-10-feature-update-2004-but-your-device-is-not-quite-ready.png" alt="Windows Update - Feature update to Windows 10, version 2004. The Windows 10 May 2020 Update is on its way. We’re offering this update to compatible devices, but your device isn’t quite ready for it. Once your device is ready, you’ll see the update available on this page. There’s nothing you need to do at this time." on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5NCIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Device isn’t quite ready for update</figcaption></figure> <p>When the update fails, the boot loader will try to restore your previous version of Windows. Unfortunately, my Windows 10 gets stuck to a boot loop displaying a black screen with the message <strong>Restoring your previous version of Windows…</strong> 😱</p> <figure><amp-img width="693" height="302" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.webp" alt="Restoring your previous version of Windows... Windlows 10" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjY5MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="693" height="302" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.png" alt="Restoring your previous version of Windows... Windlows 10" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMiIgd2lkdGg9IjY5MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h2 id="fix-reboot-loop-after-fail-windows-upgrade">Fix Reboot Loop After Fail Windows Upgrade<a class="anchor-link" href="#fix-reboot-loop-after-fail-windows-upgrade"><i class="fas fa-link"></i></a></h2> <p>Many search results relate to this issue, if you google it. However, I found most of them did not work for my computer.</p> <p>Eventually, I troubleshot the problem by <strong>repairing the boot configuration data (BCD) in the EFI partition for Windows 10</strong>. To do that, you need a Windows 10 repair disc or a Windows 10 installation USB drive. If you don’t have one, use another computer to visit <a data-vars-event-label="https://www.microsoft.com/en-us/software-download/windows10" href="https://www.microsoft.com/en-us/software-download/windows10">Download Windows 10</a> on the Microsoft website. Then, download and run the Media Creation Tool to create a bootable USB or DVD. After preparing the repair media 📀, move it to the fault machine and boot up to the Windows Startup Repair mode.</p> <figure class="text-center"><amp-img width="648" height="350" layout="intrinsic" src="/images/posts/windows/win10_safe_mode.webp" alt="Windows 10 Safe mode" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1MCIgd2lkdGg9IjY0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="648" height="350" layout="intrinsic" src="/images/posts/windows/win10_safe_mode.png" alt="Windows 10 Safe mode" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1MCIgd2lkdGg9IjY0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>In the Advanced options, select the <strong>Command Prompt</strong> option. Use the following commands to identify the partitions:</p> <ol> <li><span class="cli">X:\></span><code class="language-plaintext highlighter-rouge">diskpart</code></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">list disk</code></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">select disk 0</code><br>* <em>or the number for the boot disk that has the EFI partition</em></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">list partition</code></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">select partition 1</code><br>* <em>or the number for the EFI partition, which usually is only a few hundred MB in size</em></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">assign letter=S</code></li> <li><span class="cli">DISKPART></span><code class="language-plaintext highlighter-rouge">exit</code></li> </ol> <p>Next, change the current path to the partition and use the <code class="language-plaintext highlighter-rouge">bcdboot</code> command to repair the damaged boot files:</p> <ol start="8"> <li><span class="cli">X:\></span><code class="language-plaintext highlighter-rouge">S:</code></li> <li><span class="cli">S:\></span><code class="language-plaintext highlighter-rouge">bcdboot D:\Windows /s S: /f UEFI</code><br>* <em>replace <code class="language-plaintext highlighter-rouge">D:</code> with the letter for the partition that has the Windows system</em></li> <li><span class="cli">S:\></span><code class="language-plaintext highlighter-rouge">exit</code></li> </ol> <p>Reboot your computer, the Windows 10 will start normally if the fix works.</p> <hr> <p><strong>Useful External Links</strong>:</p> <ul> <li> <p><a data-vars-event-label="https://www.howtogeek.com/675118/how-to-install-windows-10s-may-2020-update/" href="https://www.howtogeek.com/675118/how-to-install-windows-10s-may-2020-update/">How to Install Windows 10’s May 2020 Update</a></p> </li> <li> <p><a data-vars-event-label="https://youtu.be/l_I4K2-Rr_Y" href="https://youtu.be/l_I4K2-Rr_Y">Windows 10 - Repair EFI Partition | Windows Ninja - YouTube</a></p> </li> <li> <p><a data-vars-event-label="https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/" href="https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/">The Windows Subsystem for Linux BUILD 2020 Summary | Windows Command Line</a></p> </li> @@ -27,18 +27,17 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Fix reboot loop after a fail upgrade of Windows 10, Version 2004, Build 19041" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}},"videoPlay":{"on":"video-play","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_start","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"videoPause":{"on":"video-pause","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_paused","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}},"VideoPercentagePlayed":{"on":"video-percentage-played","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_progress","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"},"videoSpec":{"percentages":[10,25,50,75]}},"videoEnded":{"on":"video-ended","request":"event","selector":["amp-youtube[data-videoid='YtqNzdrtrmw']"],"vars":{"event_name":"video_complete","method":"Google","video_current_time":"${currentTime}","video_duration":"${duration}","video_percent":"$CALC($CALC(${currentTime}, ${duration}, divide, false), 100, multiply, true)","video_provider":"youtube","video_title":"${videoTitle}","video_url":"${videoUrl}"}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/academic/index.html b/category/academic/index.html index 67369d642..56ae7677c 100644 --- a/category/academic/index.html +++ b/category/academic/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -52,19 +52,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Academic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/announcement/index.html b/category/announcement/index.html index d4cd8661d..d2fbbfa8c 100644 --- a/category/announcement/index.html +++ b/category/announcement/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -29,19 +29,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Announcement" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/cloud/index.html b/category/cloud/index.html index fafa38925..cc980401f 100644 --- a/category/cloud/index.html +++ b/category/cloud/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -88,19 +88,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/computer-science/index.html b/category/computer-science/index.html index ca2b59c28..3406d42b4 100644 --- a/category/computer-science/index.html +++ b/category/computer-science/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/developer-tools/index.html b/category/developer-tools/index.html index 2e8554e1e..712184626 100644 --- a/category/developer-tools/index.html +++ b/category/developer-tools/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -13,7 +13,9 @@ </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> -<section class="row recent-posts"> <div class="section-title"> <h1><span>category 'Developer tools'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2016/01/18/Installation-of-Andriod-Studio" aria-hidden="true" tabindex="-1"><figure><amp-img width="513" height="400" layout="intrinsic" src="/images/posts/android/Android_Studio_setup.webp" alt="thumbnail for Installation..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwMCIgd2lkdGg9IjUxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="513" height="400" layout="intrinsic" src="/images/posts/android/Android_Studio_setup.png" alt="thumbnail for Installation..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwMCIgd2lkdGg9IjUxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Installation..." src="/images/posts/android/Android_Studio_setup.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2016/01/18/Installation-of-Andriod-Studio" rel="bookmark">Installation of Android Studio and SDK Tools</a></h3> <p class="card-text"> +<section class="row recent-posts"> <div class="section-title"> <h1><span>category 'Developer tools'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2016/01/18/Installation-of-Andriod-Studio" aria-hidden="true" tabindex="-1"><figure><amp-img width="513" height="400" layout="intrinsic" src="/images/posts/android/Android_Studio_setup.webp" alt="thumbnail for Installation..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwMCIgd2lkdGg9IjUxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="513" height="400" layout="intrinsic" src="/images/posts/android/Android_Studio_setup.png" alt="thumbnail for Installation..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwMCIgd2lkdGg9IjUxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2016/01/18/Installation-of-Andriod-Studio" rel="bookmark">Installation of Android Studio and SDK Tools</a></h3> <p class="card-text"> </p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/android-studio/">Android Studio</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2016-01-18T21:36:00+08:00" itemprop="datePublished" title="Published on">18 Jan 2016</time></div> <span class="post-read-more"><a href="/blog/2016/01/18/Installation-of-Andriod-Studio" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> </div> </div> </section> </main> <aside class="col-md-4 col-lg-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> @@ -24,19 +26,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Developer tools" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/index.html b/category/index.html index 4d0e99205..66efff44c 100644 --- a/category/index.html +++ b/category/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -12,7 +12,7 @@ <li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> -</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">List of Categories</h1> <div class="article-post"> <div class="tag-expo"> <ul class="tags"><h4>A</h4><li> <a href="/category/academic/" class="post-tag">Academic</a> <span class="badge badge-pill badge-primary">14</span> </li><li> <a href="/category/announcement/" class="post-tag">Announcement</a> <span class="badge badge-pill badge-primary">4</span> </li><h4>C</h4><li> <a href="/category/cloud/" class="post-tag">Cloud</a> <span class="badge badge-pill badge-primary">33</span> </li><li> <a href="/category/computer-science/" class="post-tag">Computer Science</a> <span class="badge badge-pill badge-primary">1</span> </li><h4>D</h4><li> <a href="/category/developer-tools/" class="post-tag">Developer tools</a> <span class="badge badge-pill badge-primary">1</span> </li><h4>L</h4><li> <a href="/category/linux/" class="post-tag">Linux</a> <span class="badge badge-pill badge-primary">2</span> </li><h4>P</h4><li> <a href="/category/project/" class="post-tag">Project</a> <span class="badge badge-pill badge-primary">2</span> </li><h4>W</h4><li> <a href="/category/web-development/" class="post-tag">Web Development</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/category/windows/" class="post-tag">Windows</a> <span class="badge badge-pill badge-primary">2</span> </li></ul> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">List of Categories</h1> <div class="article-post"> <div class="tag-expo"> <ul class="tags"><h4>A</h4><li> <a href="/category/academic/" class="post-tag">Academic</a> <span class="badge badge-pill badge-primary">14</span> </li><li> <a href="/category/announcement/" class="post-tag">Announcement</a> <span class="badge badge-pill badge-primary">4</span> </li><h4>C</h4><li> <a href="/category/cloud/" class="post-tag">Cloud</a> <span class="badge badge-pill badge-primary">33</span> </li><li> <a href="/category/computer-science/" class="post-tag">Computer Science</a> <span class="badge badge-pill badge-primary">1</span> </li><h4>D</h4><li> <a href="/category/developer-tools/" class="post-tag">Developer tools</a> <span class="badge badge-pill badge-primary">2</span> </li><h4>L</h4><li> <a href="/category/linux/" class="post-tag">Linux</a> <span class="badge badge-pill badge-primary">2</span> </li><h4>P</h4><li> <a href="/category/project/" class="post-tag">Project</a> <span class="badge badge-pill badge-primary">2</span> </li><h4>W</h4><li> <a href="/category/web-development/" class="post-tag">Web Development</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/category/windows/" class="post-tag">Windows</a> <span class="badge badge-pill badge-primary">2</span> </li></ul> </div> </div></main> <aside class="col-md-4 col-lg-4 right-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> @@ -21,19 +21,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in List of Categories" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/linux/index.html b/category/linux/index.html index 33cbf7253..59355f1db 100644 --- a/category/linux/index.html +++ b/category/linux/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/project/index.html b/category/project/index.html index 9ef84a3e2..77abe0e8c 100644 --- a/category/project/index.html +++ b/category/project/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Project" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/web-development/index.html b/category/web-development/index.html index afcb365d9..40d347229 100644 --- a/category/web-development/index.html +++ b/category/web-development/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Web Development" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/category/windows/index.html b/category/windows/index.html index 69d815dbe..4a969226e 100644 --- a/category/windows/index.html +++ b/category/windows/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Windows" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/contact.html b/contact.html index b77db13f1..2fb2012b7 100644 --- a/contact.html +++ b/contact.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -12,7 +12,7 @@ <li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> -</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">Contact</h1> <div class="article-post"> <p>Got a suggestion or some feedback to improve this website or want to inquire about something ?</p> <p>Get in touch by sending an email to me using this contact form</p> <p>Although I try to respond to all emails and other communications, but I cannot make any commitments regarding the same. If you need to discuss any of the posts/articles published on this website, you can use the Disqus comment box on the posts.</p> <form action-xhr="https://getsimpleform.com/messages?form_api_token=7038eea2fdbb0f5b0abc92b0cb60113d" method="POST"> <div class="form-group row"> <div class="col-md-6"> <input class="form-control" type="text" name="name" placeholder="Name"> </div> <div class="col-md-6"> <input class="form-control" type="email" name="_replyto" placeholder="E-mail Address"> </div> </div> <textarea rows="8" class="form-control mb-3" name="message" placeholder="Message"></textarea> <input class="btn btn-primary" type="submit" value="Send"> </form> </div></main> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">Contact</h1> <div class="article-post"> <p>Got a suggestion or some feedback to improve this website or want to inquire about something ?</p> <p>Get in touch by sending an email to me using this contact form</p> <p>Although I try to respond to all emails and other communications, but I cannot make any commitments regarding the same. If you need to discuss any of the posts/articles published on this website, you can use the Disqus comment box on the posts.</p> <form action-xhr="https://getsimpleform.com/messages?form_api_token=7038eea2fdbb0f5b0abc92b0cb60113d" method="POST"> <div class="form-group row"> <div class="col-md-6"> <input class="form-control" type="text" name="name" placeholder="Name"> </div> <div class="col-md-6"> <input class="form-control" type="email" name="_replyto" placeholder="E-mail Address"> </div> </div> <textarea rows="8" class="form-control mb-3" name="message" placeholder="Message"></textarea> <input class="btn btn-primary" type="submit" value="Send"> </form> </div></main> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/feed.xml b/feed.xml index 86f4f0ed0..bf1fa8fcf 100644 --- a/feed.xml +++ b/feed.xml @@ -5,10 +5,98 @@ <description>Feel free to bookmark this to keep an eye on my project updates</description> <link>https://chriskyfung.github.io/</link> <atom:link href="https://chriskyfung.github.io/feed.xml" rel="self" type="application/rss+xml"/> - <pubDate>Fri, 29 Nov 2024 00:28:10 +0800</pubDate> - <lastBuildDate>Fri, 29 Nov 2024 00:28:10 +0800</lastBuildDate> + <pubDate>Fri, 27 Dec 2024 18:23:52 +0800</pubDate> + <lastBuildDate>Fri, 27 Dec 2024 18:23:52 +0800</lastBuildDate> <generator>Jekyll v4.2.2</generator> + <item> + <title>Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</title> + <description><p>Ever found yourself typing <code class="language-plaintext highlighter-rouge">gh repo clone</code> and struggling to remember repository names? I’ve been there. As a developer who works with dozens of repositories daily, I needed a better solution. That’s why I created a custom completion script that makes the GitHub CLI’s clone command more powerful and user-friendly.</p> + +<h2 id="why-custom-completion-matters">Why Custom Completion Matters</h2> + +<p>While the standard <code class="language-plaintext highlighter-rouge">gh repo clone</code> is incredibly useful, it lacks intelligent autocompletion. Here’s what you’re missing:</p> + +<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gh repo clone my&lt;tab&gt; +my-awesome-project my-docker-images my-python-scripts +</code></pre></div></div> + +<p>I struggled to recall exact repository names, some of which are a mouthful. Then there were the flags that I could never remember. These tiny hurdles added up, hindering productivity, especially for those who constantly work with multiple repositories.</p> + +<p>Driven by the desire for seamless interaction, I embarked on a quest to enhance my command-line experience. Instead of wrestling with repository names and flags, I decided to create a custom completion script for the <code class="language-plaintext highlighter-rouge">gh repo clone</code> command. The script enables:</p> + +<ul> + <li><strong>Smart Repository Suggestions</strong>: Instantly see matching repositories as you type.</li> + <li><strong>Flag Completion</strong>: Access additional <code class="language-plaintext highlighter-rouge">git clone</code> options for <code class="language-plaintext highlighter-rouge">gh repo clone</code> by pressing <code class="language-plaintext highlighter-rouge">tab</code> twice after the <code class="language-plaintext highlighter-rouge">--</code> flag.</li> +</ul> + +<p>The completion script automatically populates suggestions, enabling faster interaction and execution with the GitHub CLI.</p> + +<h3 id="common-use-cases">Common Use Cases</h3> + +<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Clone to a custom directory</span> +gh repo clone username/repo + +<span class="c"># Clone with a specific branch</span> +gh repo clone username/repo <span class="nt">--</span> <span class="nt">--branch</span> feature-branch + +<span class="c"># Clone with depth limit</span> +gh repo clone username/repo <span class="nt">--</span> <span class="nt">--depth</span> 1 +</code></pre></div></div> + +<h2 id="quick-setup-guide">Quick Setup Guide</h2> + +<ol> + <li> + <p><strong>Install the completion script</strong>:</p> + + <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-o</span> ~/.gh-repo-clone-completion.bash https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280/raw/.bash_profile +</code></pre></div> </div> + + <p>You can view the source code and contribute on <a href="https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280">GitHub Gist</a>.</p> + </li> + <li> + <p><strong>Add to your shell</strong>:</p> + + <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'source ~/.gh-repo-clone-completion.bash'</span> <span class="o">&gt;&gt;</span> ~/.bashrc <span class="c"># for bash</span> +<span class="c"># OR</span> +<span class="nb">echo</span> <span class="s1">'source ~/.gh-repo-clone-completion.bash'</span> <span class="o">&gt;&gt;</span> ~/.zshrc <span class="c"># for zsh</span> +</code></pre></div> </div> + </li> + <li> + <p><strong>Verify the Setup</strong>:</p> + + <p>Type <code class="language-plaintext highlighter-rouge">gh repo clone &lt;tab&gt;</code> in your terminal. If set up correctly, you should see repository suggestions as you type.</p> + + <p>Type <code class="language-plaintext highlighter-rouge">gh repo clone -- &lt;tab&gt;</code> in your terminal. You should see additional <code class="language-plaintext highlighter-rouge">git clone</code> flags by listing them after <code class="language-plaintext highlighter-rouge">--</code>.</p> + </li> +</ol> + +<h2 id="conclusion">Conclusion</h2> + +<p>Implementing this custom completion function can transform your GitHub CLI experience by making it more efficient and user-friendly. My coding sessions are now more about creativity and less about the little frustrations.</p> + +<p>Try it yourself and see how much faster your GitHub workflow becomes. Questions or suggestions? Feel free to contribute to the script on my GitHub!</p> + +<p>Happy coding! 🚀</p> +</description> + <pubDate>Fri, 27 Dec 2024 15:12:00 +0800</pubDate> + <link>https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/</link> + <guid isPermaLink="true">https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/</guid> + + <category>Bash</category> + + <category>Command-line</category> + + <category>GitHub CLI</category> + + <category>Autocompletions</category> + + + <category>Developer tools</category> + + </item> + <item> <title>Qwiklabs Lab Completion Tracker - Version History</title> <description><p><br /></p> @@ -1092,7 +1180,7 @@ gcloud beta run deploy frontend-production-service <span class="se" <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-4rqeFp87s6I" width="480" height="270" layout="responsive" data-videoid="4rqeFp87s6I" title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=4rqeFp87s6I" data-param-rel="0"> +<amp-youtube id="yt-4rqeFp87s6I" width="480" height="270" layout="responsive" credentials="omit" data-videoid="4rqeFp87s6I" title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-title="GSP344 Serverless Firebase Development: Challenge Lab | 🐱🏍 GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=4rqeFp87s6I" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=4rqeFp87s6I" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -1364,7 +1452,7 @@ gcloud beta run deploy frontend-production-service <span class="se" <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-C49jYtIMAsg" width="480" height="270" layout="responsive" data-videoid="C49jYtIMAsg" title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-url="https://www.youtube.com/watch?v=C49jYtIMAsg" data-param-rel="0"> +<amp-youtube id="yt-C49jYtIMAsg" width="480" height="270" layout="responsive" credentials="omit" data-videoid="C49jYtIMAsg" title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-title="GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)" data-vars-video-url="https://www.youtube.com/watch?v=C49jYtIMAsg" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=C49jYtIMAsg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -1673,7 +1761,7 @@ for </span>node <span class="k">in</span> <span c <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-jeB-FIeGKkQ" width="480" height="270" layout="responsive" data-videoid="jeB-FIeGKkQ" title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=jeB-FIeGKkQ" data-param-rel="0"> +<amp-youtube id="yt-jeB-FIeGKkQ" width="480" height="270" layout="responsive" credentials="omit" data-videoid="jeB-FIeGKkQ" title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-title="GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour" data-vars-video-url="https://www.youtube.com/watch?v=jeB-FIeGKkQ" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=jeB-FIeGKkQ" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -1906,7 +1994,7 @@ gcloud projects add-iam-policy-binding <span class="nv">$DEVSHEL <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-HiFMZGDBzZo" width="480" height="270" layout="responsive" data-videoid="HiFMZGDBzZo" title="GSP342 Ensure Access &amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-title="GSP342 Ensure Access &amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-url="https://www.youtube.com/watch?v=HiFMZGDBzZo" data-param-rel="0"> +<amp-youtube id="yt-HiFMZGDBzZo" width="480" height="270" layout="responsive" credentials="omit" data-videoid="HiFMZGDBzZo" title="GSP342 Ensure Access &amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-title="GSP342 Ensure Access &amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)" data-vars-video-url="https://www.youtube.com/watch?v=HiFMZGDBzZo" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=HiFMZGDBzZo" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -2363,7 +2451,7 @@ Run the following to apply the configuration file:</p> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-bpeOjFZklpg" width="480" height="270" layout="responsive" data-videoid="bpeOjFZklpg" title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=bpeOjFZklpg" data-param-rel="0"> +<amp-youtube id="yt-bpeOjFZklpg" width="480" height="270" layout="responsive" credentials="omit" data-videoid="bpeOjFZklpg" title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-title="GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=bpeOjFZklpg" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=bpeOjFZklpg" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -2798,7 +2886,7 @@ git push origin master <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-pSSA6vlRgtA" width="480" height="270" layout="responsive" data-videoid="pSSA6vlRgtA" title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=pSSA6vlRgtA" data-param-rel="0"> +<amp-youtube id="yt-pSSA6vlRgtA" width="480" height="270" layout="responsive" credentials="omit" data-videoid="pSSA6vlRgtA" title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-title="GSP330 Implement DevOps in Google Cloud: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=pSSA6vlRgtA" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=pSSA6vlRgtA" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -3027,7 +3115,7 @@ python analyze-images.py <span class="nv">$PROJECT</span> <h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> -<amp-youtube id="yt-kEEqbeqR6og" width="480" height="270" layout="responsive" data-videoid="kEEqbeqR6og" title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=kEEqbeqR6og" data-param-rel="0"> +<amp-youtube id="yt-kEEqbeqR6og" width="480" height="270" layout="responsive" credentials="omit" data-videoid="kEEqbeqR6og" title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-title="GSP329 Integrate with Machine Learning APIs: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=kEEqbeqR6og" data-param-rel="0"> <div fallback=""> <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=kEEqbeqR6og" rel="noopener" target="_blank">Watch on YouTube</a></p> </div> @@ -3089,313 +3177,6 @@ python analyze-images.py <span class="nv">$PROJECT</span> <category>Cloud AI</category> - <category>Cloud</category> - - </item> - - <item> - <title>☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook</title> - <description><p>In this article, we will go through the lab <strong>GSP324</strong> <em><a href="https://www.qwiklabs.com/focuses/12011?parent=catalog">Explore Machine Learning Models with Explainable AI: Challenge Lab</a></em>, which is an <a href="https://www.qwiklabs.com/quests/126">advanced-level</a> exercise on Qwiklabs. TensorFlow is the dominant AI framework in the industry. You will practice the skills and knowledge in using Cloud AI Platform to build, train and deploy TensorFlow models for machine learning the dataset of the Home Mortgage Disclosure Act (HMDA) in New York.</p> - -<p><strong>Topics tested</strong>:</p> - -<ol> - <li>Launching an AI Platform Notebook</li> - <li>Downloading and exploring a sample dataset</li> - <li>Building and training two different TensorFlow models</li> - <li>Deploying models to the Cloud AI Platform</li> - <li>Using the What-If Tool to compare the models</li> -</ol> - -<h2 id="start-a-jupyterlab-notebook-instance">Start a JupyterLab Notebook instance</h2> - -<ol> - <li>In the Cloud Console, in the search bar, type in <strong>Notebook</strong>.</li> - <li>Select <strong>Notebook</strong> for <strong>AI Platform</strong>.</li> - <li>On the Notebook instances page, click <strong>New Instance</strong>.</li> - <li> - <p>In the Customize instance menu, select the latest version of TensorFlow <em>without</em> GPUs.</p> - - <figure class="ml-li"><amp-img width="1138" height="660" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="1138" height="660" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-1.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="5"> - <li> - <p>In the <strong>New notebook instance</strong> dialog, accept the default options and click <strong>Create</strong>.</p> - - <figure class="ml-li text-center"><amp-img width="559" height="506" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-2.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="559" height="506" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-2.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="6"> - <li>After a few minutes, the AI Platform console will display your instance name, followed by Open Jupyterlab.<br /><br />Click <strong>Open JupyterLab</strong>. Your notebook is now set up.</li> -</ol> - -<h2 id="download-the-challenge-notebook">Download the Challenge Notebook</h2> - -<ol> - <li> - <p>In your notebook, click the <strong>terminal</strong>.</p> - - <figure class="ml-li"><amp-img width="985" height="668" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="985" height="668" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-1.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="2"> - <li> - <p>Clone the repo:</p> - - <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/GoogleCloudPlatform/training-data-analyst -</code></pre></div> </div> - </li> -</ol> - -<ol start="3"> - <li>Go to the enclosing folder: <code class="language-plaintext highlighter-rouge">training-data-analyst/quests/dei</code></li> - <li> - <p>Open the notebook file <a href="https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/quests/dei/what-if-tool-challenge.ipynb"><code class="language-plaintext highlighter-rouge">what-if-tool-challenge.ipynb</code></a>.</p> - - <figure class="ml-li"><amp-img width="973" height="690" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-2.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="973" height="690" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-2.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="5"> - <li>Download and import the dataset <code class="language-plaintext highlighter-rouge">hmda_2017_ny_all-records_labels</code> by running the first to the eighth cells (the <strong>Get the Train &amp; Test Data</strong> section).</li> -</ol> - -<h2 id="build-and-train-your-models">Build and train your models</h2> - -<ol> - <li> - <p>In the second cell of the <strong>Train your first model on the complete dataset</strong> section, add the following lines to create the model.</p> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">model</span> <span class="o">=</span> <span class="n">Sequential</span><span class="p">()</span> -<span class="n">model</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">layers</span><span class="p">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="n">input_dim</span><span class="o">=</span><span class="n">input_size</span><span class="p">))</span> -<span class="n">model</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">layers</span><span class="p">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">activation</span><span class="o">=</span><span class="s">'sigmoid'</span><span class="p">))</span> -<span class="n">model</span><span class="p">.</span><span class="nb">compile</span><span class="p">(</span><span class="n">optimizer</span><span class="o">=</span><span class="s">'sgd'</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s">'mse'</span><span class="p">)</span> -<span class="n">model</span><span class="p">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train_data</span><span class="p">,</span> <span class="n">train_labels</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span> <span class="n">epochs</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> -</code></pre></div> </div> - - <figure class="ml-li"><amp-img width="1100" height="668" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="1100" height="668" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-1.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="2"> - <li> - <p>Copy the code for training the second model. Modify <code class="language-plaintext highlighter-rouge">model</code> to <code class="language-plaintext highlighter-rouge">limited_model</code> as well as <code class="language-plaintext highlighter-rouge">train_data, train_labels</code> to <code class="language-plaintext highlighter-rouge">limited_train_data, limited_train_labels</code>. The code for the second model should look like the following.</p> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">limited_model</span> <span class="o">=</span> <span class="n">Sequential</span><span class="p">()</span> -<span class="n">limited_model</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">layers</span><span class="p">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="n">input_dim</span><span class="o">=</span><span class="n">input_size</span><span class="p">))</span> -<span class="n">limited_model</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">layers</span><span class="p">.</span><span class="n">Dense</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">activation</span><span class="o">=</span><span class="s">'sigmoid'</span><span class="p">))</span> -<span class="n">limited_model</span><span class="p">.</span><span class="nb">compile</span><span class="p">(</span><span class="n">optimizer</span><span class="o">=</span><span class="s">'sgd'</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="s">'mse'</span><span class="p">)</span> -<span class="n">limited_model</span><span class="p">.</span><span class="n">fit</span><span class="p">(</span><span class="n">limited_train_data</span><span class="p">,</span> <span class="n">limited_train_labels</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span> <span class="n">epochs</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> -</code></pre></div> </div> - - <figure class="ml-li"><amp-img width="964" height="584" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-2.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="964" height="584" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-2.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="3"> - <li>Run the cells in this section and wait for the finish of model training.</li> -</ol> - -<h2 id="deploy-the-models-to-ai-platform">Deploy the models to AI Platform</h2> - -<p>Moving on to the <strong>Deploy your models to the AI Platform</strong> section in the notebook.</p> - -<ol> - <li>Replace the values of <code class="language-plaintext highlighter-rouge">GCP_PROJECT</code> and <code class="language-plaintext highlighter-rouge">MODEL_BUCKET</code> with your project ID and a unique bucket name.</li> - <li> - <p>Change the <code class="language-plaintext highlighter-rouge">REGION</code> to <code class="language-plaintext highlighter-rouge">us-west1</code> (Use the same region of the Notebook instance).</p> - - <figure class="ml-li"><amp-img width="865" height="508" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="865" height="508" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<ol start="3"> - <li> - <p>Run those three cells and then confirm the created bucket and the uploaded model files in Cloud Storage.</p> - - <figure class="ml-li text-center"><amp-img width="510" height="166" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-3.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="510" height="166" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-3.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - </li> -</ol> - -<h5 id="create-your-first-ai-platform-model-complete_model">Create your first AI Platform model: complete_model</h5> - -<figure class="ml-li text-center"><amp-img width="678" height="251" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-3.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="678" height="251" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-3.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>The specification for creating AI Platform models listed in the notebook</figcaption></figure> - -<ol start="4"> - <li> - <p>Add the following codes to the notebook cells for your COMPLETE model.</p> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">!</span><span class="n">gcloud</span> <span class="n">ai</span><span class="o">-</span><span class="n">platform</span> <span class="n">models</span> <span class="n">create</span> <span class="err">$</span><span class="n">MODEL_NAME</span> <span class="o">--</span><span class="n">regions</span> <span class="err">$</span><span class="n">REGION</span> -</code></pre></div> </div> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">!</span><span class="n">gcloud</span> <span class="n">ai</span><span class="o">-</span><span class="n">platform</span> <span class="n">versions</span> <span class="n">create</span> <span class="err">$</span><span class="n">VERSION_NAME</span> \ -<span class="o">--</span><span class="n">model</span><span class="o">=</span><span class="err">$</span><span class="n">MODEL_NAME</span> \ -<span class="o">--</span><span class="n">framework</span><span class="o">=</span><span class="s">'TensorFlow'</span> \ -<span class="o">--</span><span class="n">runtime</span><span class="o">-</span><span class="n">version</span><span class="o">=</span><span class="mf">2.1</span> \ -<span class="o">--</span><span class="n">origin</span><span class="o">=</span><span class="err">$</span><span class="n">MODEL_BUCKET</span><span class="o">/</span><span class="n">saved_model</span><span class="o">/</span><span class="n">my_model</span> \ -<span class="o">--</span><span class="n">staging</span><span class="o">-</span><span class="n">bucket</span><span class="o">=</span><span class="err">$</span><span class="n">MODEL_BUCKET</span> \ -<span class="o">--</span><span class="n">python</span><span class="o">-</span><span class="n">version</span><span class="o">=</span><span class="mf">3.7</span> \ -<span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="err">$</span><span class="n">GCP_PROJECT</span> -</code></pre></div> </div> - - <p class="callout"><strong>Remark</strong>: The gcloud ai-platform command group should be <code class="language-plaintext highlighter-rouge">versions</code> rather than <code class="language-plaintext highlighter-rouge">version</code>.</p> - - <figure class="ml-li text-center"><amp-img width="715" height="390" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v2.1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="715" height="390" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v2.1.jpg" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>Create your first AI Platform model: complete_model<br />(With params --runtime-version=2.1, --python-version=3.7)</figcaption></figure> - </li> -</ol> - -<h5 id="create-your-second-ai-platform-model-limited_model">Create your second AI Platform model: limited_model</h5> - -<ol start="5"> - <li> - <p>Add the following codes to the notebook cells for your LIMITED model.</p> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">!</span><span class="n">gcloud</span> <span class="n">ai</span><span class="o">-</span><span class="n">platform</span> <span class="n">models</span> <span class="n">create</span> <span class="err">$</span><span class="n">LIM_MODEL_NAME</span> <span class="o">--</span><span class="n">regions</span> <span class="err">$</span><span class="n">REGION</span> -</code></pre></div> </div> - - <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">!</span><span class="n">gcloud</span> <span class="n">ai</span><span class="o">-</span><span class="n">platform</span> <span class="n">versions</span> <span class="n">create</span> <span class="err">$</span><span class="n">VERSION_NAME</span> \ -<span class="o">--</span><span class="n">model</span><span class="o">=</span><span class="err">$</span><span class="n">LIM_MODEL_NAME</span> \ -<span class="o">--</span><span class="n">framework</span><span class="o">=</span><span class="s">'TensorFlow'</span> \ -<span class="o">--</span><span class="n">runtime</span><span class="o">-</span><span class="n">version</span><span class="o">=</span><span class="mf">2.1</span> \ -<span class="o">--</span><span class="n">origin</span><span class="o">=</span><span class="err">$</span><span class="n">MODEL_BUCKET</span><span class="o">/</span><span class="n">saved_limited_model</span><span class="o">/</span><span class="n">my_limited_model</span> \ -<span class="o">--</span><span class="n">staging</span><span class="o">-</span><span class="n">bucket</span><span class="o">=</span><span class="err">$</span><span class="n">MODEL_BUCKET</span> \ -<span class="o">--</span><span class="n">python</span><span class="o">-</span><span class="n">version</span><span class="o">=</span><span class="mf">3.7</span> \ -<span class="o">--</span><span class="n">project</span><span class="o">=</span><span class="err">$</span><span class="n">GCP_PROJECT</span> -</code></pre></div> </div> - - <p class="callout"><strong>Remark</strong>: The gcloud ai-platform command group should be <code class="language-plaintext highlighter-rouge">versions</code> rather than <code class="language-plaintext highlighter-rouge">version</code>.</p> - - <figure class="ml-li text-center"><amp-img width="712" height="388" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v2.1.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="712" height="388" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v2.1.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>Create your second AI Platform model: limited_model<br />(With params --runtime-version=2.1, --python-version=3.7)</figcaption></figure> - </li> -</ol> - -<h3 id="troubleshooting-runtime-version-issue">Troubleshooting runtime version issue</h3> - -<p>The lab had a serious bug when I was carrying it out on Jun 12, 2020. I couldn’t pass the third checkpoint if set up the AI Platform models according to the lab instruction. The issue seems to be caused by the inconsistencies between the GCP training material and the Qwiklabs marking scheme. While the notebook guided to create the models with runtime version 2.1 and Python 3.7, the checkpoint message specified the required runtime version = 1.14 as shown in the below picture.</p> - -<figure class="text-center"><amp-img width="452" height="208" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="452" height="208" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>Checkpoint requirement for creating your AI Platform models</figcaption></figure> - -<p>Unfortunately, it still doesn’t work if you just change the runtime version from 2.1 to 1.14. The runtime version 1.14 must be coupled with Python 3.5, according to the <a href="https://cloud.google.com/ai-platform/prediction/docs/runtime-version-list#runtime-version-support">AI Platform Documentation</a>. Thus, after replacing the runtime and Python version numbers, correspondingly, the codes for creating the AI Platform models should be modified as shown below.</p> - -<figure class="text-center"><amp-img width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>Create your first AI Platform model: complete_model<br />(Fixed with --runtime-version=1.14, --python-version=3.5)</figcaption></figure> - -<figure class="text-center"><amp-img width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.webp" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="675" height="389" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.png" alt="Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img><figcaption>Create your second AI Platform model: limited_model<br /> (Fixed with --runtime-version=1.14, --python-version=3.5)</figcaption></figure> - -<h2 id="use-the-what-if-tool-to-explore-biases">Use the What-If Tool to explore biases</h2> - -<p>Run the last cell in the notebook to activate What-If Tool. Explore the differences between the two models and you should be able to get the answers as follows:</p> - -<blockquote> - <p>1. In the Performance and Fairness tab, slice by sex (applicant_sex_name_Female). How does the complete model compare to the limited model for females?</p> -</blockquote> - -<figure class="ml-li"><amp-img width="399" height="79" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.webp" alt="The complete model has equal performance across sexes, whereas the limited model is much worse on females" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="399" height="79" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.png" alt="The complete model has equal performance across sexes, whereas the limited model is much worse on females" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - -<blockquote> - <p>2. Click on one of the datapoints in the middle of the arc. In the datapoint editor, change (applicant_sex_name_Female) to 0, and (applicant_sex_name_Male) to 1. Now run the inference again. How does the model change?</p> -</blockquote> - -<figure class="ml-li"><amp-img width="397" height="85" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.webp" alt="The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="397" height="85" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.png" alt="The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - -<blockquote> - <p>3. In the Performance and Fairness tab, use the fairness buttons to see the thresholds for the sexes for demographic parity between males and females. How does this change the thresholds for the limited model?</p> -</blockquote> - -<figure class="ml-li"><amp-img width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.webp" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"> - <amp-img fallback="" width="397" height="56" layout="intrinsic" src="/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.png" alt="The thresholds have to be wildly different for the limited model" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox"></amp-img> - </amp-img></figure> - -<p><br /></p> - -<p><strong>Congratulations! You completed this challenge lab.</strong></p> - -<h2 id="-demonstration-video"><i class="far fa-play-circle"></i> Demonstration Video</h2> - -<amp-youtube id="yt-UzP2pX1qayA" width="480" height="270" layout="responsive" data-videoid="UzP2pX1qayA" title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-title="GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab" data-vars-video-url="https://www.youtube.com/watch?v=UzP2pX1qayA" data-param-rel="0"> - <div fallback=""> - <p>This browser does not support the YouTube video player. <a href="https://www.youtube.com/watch?v=UzP2pX1qayA" rel="noopener" target="_blank">Watch on YouTube</a></p> - </div> -</amp-youtube> - -<div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>⏱<span class="n">Timestamps</span>: -<span class="m">00</span>:<span class="m">00</span> <span class="n">Start</span> <span class="n">Lab</span> -<span class="m">00</span>:<span class="m">35</span> <span class="n">Start</span> <span class="n">a</span> <span class="n">JupyterLab</span> <span class="n">Notebook</span> <span class="n">instance</span> -<span class="m">03</span>:<span class="m">43</span> <span class="n">Download</span> <span class="n">the</span> <span class="n">Challenge</span> <span class="n">Notebook</span> -<span class="m">05</span>:<span class="m">38</span> <span class="n">Build</span> <span class="n">and</span> <span class="n">train</span> <span class="n">your</span> <span class="n">models</span> -<span class="m">21</span>:<span class="m">40</span> <span class="n">Deploy</span> <span class="n">the</span> <span class="n">models</span> <span class="n">to</span> <span class="n">AI</span> <span class="n">Platform</span> (❌ <span class="n">runtime</span> <span class="n">version</span> = <span class="m">2</span>.<span class="m">1</span>, <span class="n">Python</span> <span class="m">3</span>.<span class="m">7</span> ) -<span class="m">37</span>:<span class="m">09</span> <span class="n">Use</span> <span class="n">the</span> <span class="n">What</span>-<span class="n">If</span> <span class="n">Tool</span> <span class="n">to</span> <span class="n">explore</span> <span class="n">biases</span> -<span class="m">47</span>:<span class="m">18</span> <span class="n">Deploy</span> <span class="n">the</span> <span class="n">models</span> <span class="n">to</span> <span class="n">AI</span> <span class="n">Platform</span> (✔️<span class="n">Troubleshooting</span> <span class="n">runtime</span> <span class="n">version</span> <span class="n">issue</span>) -</code></pre></div></div> - -<p><strong>Keep on reading</strong>:</p> - -<ul> - <li><a href="/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab">☁ Engineer Data in Google Cloud: Challenge Lab | logbook</a></li> -</ul> - -<p><strong>Useful links</strong>:</p> - -<ul> - <li><a href="https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/quests/dei/what-if-tool-challenge.ipynb">what-if-tool-challenge.ipynb at mGoogleCloudPlatform/training-data-analyst</a></li> - <li><a href="https://www.tensorflow.org/api_docs/python/tf/keras/Sequential">tf.keras.Sequential - TensorFlow Core v2</a></li> - <li><a href="https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense">tf.keras.layers.Dense - TensorFlow Core v2</a></li> - <li><a href="https://cloud.google.com/sdk/gcloud/reference/ai-platform">gcloud ai-platform - Google Cloud SDK Documentation</a></li> - <li><a href="https://pair-code.github.io/what-if-tool/">What-If Tool</a></li> -</ul> -</description> - <pubDate>Mon, 28 Sep 2020 01:25:00 +0800</pubDate> - <link>https://chriskyfung.github.io/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab</link> - <guid isPermaLink="true">https://chriskyfung.github.io/blog/qwiklabs/Explore-Machine-Learning-Models-with-Explainable-AI-Challenge-Lab</guid> - - <category>Qwiklabs</category> - - <category>Google Cloud</category> - - <category>Logbook</category> - - <category>TensorFlow</category> - - <category>Data Science</category> - - <category>Machine Learning</category> - - <category>Cloud</category> </item> diff --git a/github-cli-repo-clone-custom-completion/index.html b/github-cli-repo-clone-custom-completion/index.html new file mode 100644 index 000000000..0e6a3d33d --- /dev/null +++ b/github-cli-repo-clone-custom-completion/index.html @@ -0,0 +1,62 @@ +<!DOCTYPE html><html amp lang="en" i-amphtml-binding i-amphtml-layout i-amphtml-no-boilerplate transformed="self;v=1"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="preload" href="/assets/images/logo-plainSVG.svg" as="image"><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png" as="image"><link rel="preload" href="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" as="image" type="image/webp"><meta name="generator" content="Jekyll v4.2.2"><meta property="og:title" content="Speed Up GitHub CLI: Custom Completion for ‘gh repo clone’ Command"><meta name="author" content="Chris KY Fung"><meta property="og:locale" content="en_US"><meta name="description" content="Learn how to supercharge your GitHub CLI experience with custom bash completion for the ‘gh repo clone’ command. Includes step-by-step setup and practical examples."><meta property="og:description" content="Learn how to supercharge your GitHub CLI experience with custom bash completion for the ‘gh repo clone’ command. Includes step-by-step setup and practical examples."><meta property="og:url" content="https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/"><meta property="og:site_name" content="Chris KY FUNG’s Blog"><meta property="og:image" content="https://chriskyfung.github.io/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg"><meta property="og:image:height" content="431"><meta property="og:image:width" content="730"><meta property="og:type" content="article"><meta property="article:published_time" content="2024-12-27T15:12:00+08:00"><meta name="twitter:card" content="summary_large_image"><meta property="twitter:image" content="https://chriskyfung.github.io/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg"><meta property="twitter:title" content="Speed Up GitHub CLI: Custom Completion for ‘gh repo clone’ Command"><meta name="google-site-verification" content="WvB_kR1tvqtLYj1YxGXkQp6X-ue8FgK5kfQOB2K8cZA"><style amp-runtime i-amphtml-version="012410292120000">html{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch-action:pan-y pinch-zoom;touch-action:pan-y pinch-zoom}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not(.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important}html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling:touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px solid transparent!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox-element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram{padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions-dialog],body:not(.i-amphtml-subs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display:none}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list[load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load-more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px!important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-color:#000!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtml-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important}amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,.33)}.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden}amp-script[nodom],amp-script[sandboxed]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden} +/*# sourceURL=/css/ampdoc.css*/[hidden]{display:none!important}.i-amphtml-element{display:inline-block}.i-amphtml-blurry-placeholder{transition:opacity 0.3s cubic-bezier(0.0,0.0,0.2,1)!important;pointer-events:none}[layout=nodisplay]:not(.i-amphtml-element){display:none!important}.i-amphtml-layout-fixed,[layout=fixed][width][height]:not(.i-amphtml-layout-fixed){display:inline-block;position:relative}.i-amphtml-layout-responsive,[layout=responsive][width][height]:not(.i-amphtml-layout-responsive),[width][height][heights]:not([layout]):not(.i-amphtml-layout-responsive),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-layout-responsive){display:block;position:relative}.i-amphtml-layout-intrinsic,[layout=intrinsic][width][height]:not(.i-amphtml-layout-intrinsic){display:inline-block;position:relative;max-width:100%}.i-amphtml-layout-intrinsic .i-amphtml-sizer{max-width:100%}.i-amphtml-intrinsic-sizer{max-width:100%;display:block!important}.i-amphtml-layout-container,.i-amphtml-layout-fixed-height,[layout=container],[layout=fixed-height][height]:not(.i-amphtml-layout-fixed-height){display:block;position:relative}.i-amphtml-layout-fill,.i-amphtml-layout-fill.i-amphtml-notbuilt,[layout=fill]:not(.i-amphtml-layout-fill),body noscript>*{display:block;overflow:hidden!important;position:absolute;top:0;left:0;bottom:0;right:0}body noscript>*{position:absolute!important;width:100%;height:100%;z-index:2}body noscript{display:inline!important}.i-amphtml-layout-flex-item,[layout=flex-item]:not(.i-amphtml-layout-flex-item){display:block;position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.i-amphtml-layout-fluid{position:relative}.i-amphtml-layout-size-defined{overflow:hidden!important}.i-amphtml-layout-awaiting-size{position:absolute!important;top:auto!important;bottom:auto!important}i-amphtml-sizer{display:block!important}@supports (aspect-ratio:1/1){i-amphtml-sizer.i-amphtml-disable-ar{display:none!important}}.i-amphtml-blurry-placeholder,.i-amphtml-fill-content{display:block;height:0;max-height:100%;max-width:100%;min-height:100%;min-width:100%;width:0;margin:auto}.i-amphtml-layout-size-defined .i-amphtml-fill-content{position:absolute;top:0;left:0;bottom:0;right:0}.i-amphtml-replaced-content,.i-amphtml-screen-reader{padding:0!important;border:none!important}.i-amphtml-screen-reader{position:fixed!important;top:0px!important;left:0px!important;width:4px!important;height:4px!important;opacity:0!important;overflow:hidden!important;margin:0!important;display:block!important;visibility:visible!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:8px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:12px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:16px!important}.i-amphtml-unresolved{position:relative;overflow:hidden!important}.i-amphtml-select-disabled{-webkit-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.i-amphtml-notbuilt,[layout]:not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){position:relative;overflow:hidden!important;color:transparent!important}.i-amphtml-notbuilt:not(.i-amphtml-layout-container)>*,[layout]:not([layout=container]):not(.i-amphtml-element)>*,[width][height][heights]:not([layout]):not(.i-amphtml-element)>*,[width][height][sizes]:not([layout]):not(.i-amphtml-element)>*{display:none}amp-img:not(.i-amphtml-element)[i-amphtml-ssr]>img.i-amphtml-fill-content{display:block}.i-amphtml-notbuilt:not(.i-amphtml-layout-container),[layout]:not([layout=container]):not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){color:transparent!important;line-height:0!important}.i-amphtml-ghost{visibility:hidden!important}.i-amphtml-element>[placeholder],[layout]:not(.i-amphtml-element)>[placeholder],[width][height][heights]:not([layout]):not(.i-amphtml-element)>[placeholder],[width][height][sizes]:not([layout]):not(.i-amphtml-element)>[placeholder]{display:block;line-height:normal}.i-amphtml-element>[placeholder].amp-hidden,.i-amphtml-element>[placeholder].hidden{visibility:hidden}.i-amphtml-element:not(.amp-notsupported)>[fallback],.i-amphtml-layout-container>[placeholder].amp-hidden,.i-amphtml-layout-container>[placeholder].hidden{display:none}.i-amphtml-layout-size-defined>[fallback],.i-amphtml-layout-size-defined>[placeholder]{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:1}amp-img[i-amphtml-ssr]:not(.i-amphtml-element)>[placeholder]{z-index:auto}.i-amphtml-notbuilt>[placeholder]{display:block!important}.i-amphtml-hidden-by-media-query{display:none!important}.i-amphtml-element-error{background:red!important;color:#fff!important;position:relative!important}.i-amphtml-element-error:before{content:attr(error-message)}i-amp-scroll-container,i-amphtml-scroll-container{position:absolute;top:0;left:0;right:0;bottom:0;display:block}i-amp-scroll-container.amp-active,i-amphtml-scroll-container.amp-active{overflow:auto;-webkit-overflow-scrolling:touch}.i-amphtml-loading-container{display:block!important;pointer-events:none;z-index:1}.i-amphtml-notbuilt>.i-amphtml-loading-container{display:block!important}.i-amphtml-loading-container.amp-hidden{visibility:hidden}.i-amphtml-element>[overflow]{cursor:pointer;position:relative;z-index:2;visibility:hidden;display:initial;line-height:normal}.i-amphtml-layout-size-defined>[overflow]{position:absolute}.i-amphtml-element>[overflow].amp-visible{visibility:visible}template{display:none!important}.amp-border-box,.amp-border-box *,.amp-border-box :after,.amp-border-box :before{box-sizing:border-box}amp-pixel{display:none!important}amp-analytics,amp-auto-ads,amp-story-auto-ads{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}amp-story{visibility:hidden!important}html.i-amphtml-fie>amp-analytics{position:initial!important}[visible-when-invalid]:not(.visible),form [submit-error],form [submit-success],form [submitting]{display:none}amp-accordion{display:block!important}@media (min-width:1px){:where(amp-accordion>section)>:first-child{margin:0;background-color:#efefef;padding-right:20px;border:1px solid #dfdfdf}:where(amp-accordion>section)>:last-child{margin:0}}amp-accordion>section{float:none!important}amp-accordion>section>*{float:none!important;display:block!important;overflow:hidden!important;position:relative!important}amp-accordion,amp-accordion>section{margin:0}amp-accordion:not(.i-amphtml-built)>section>:last-child{display:none!important}amp-accordion:not(.i-amphtml-built)>section[expanded]>:last-child{display:block!important} +/*# sourceURL=/css/ampshared.css*/</style><script async src="https://cdn.ampproject.org/v0.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0.js" crossorigin="anonymous"></script><script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-ad-0.1.js" crossorigin="anonymous" custom-element="amp-ad"></script><script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" crossorigin="anonymous" custom-element="amp-analytics"></script><script async custom-element="amp-auto-ads" src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js" crossorigin="anonymous" custom-element="amp-auto-ads"></script><script async custom-element="amp-autocomplete" src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.js" crossorigin="anonymous" custom-element="amp-autocomplete"></script><script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-bind-0.1.js" crossorigin="anonymous" custom-element="amp-bind"></script><script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-consent-0.1.js" crossorigin="anonymous" custom-element="amp-consent"></script><script async custom-element="amp-font" src="https://cdn.ampproject.org/v0/amp-font-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-font-0.1.js" crossorigin="anonymous" custom-element="amp-font"></script><script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-form-0.1.js" crossorigin="anonymous" custom-element="amp-form"></script><script async custom-element="amp-fx-collection" src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.js" crossorigin="anonymous" custom-element="amp-fx-collection"></script><script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js" crossorigin="anonymous" custom-element="amp-iframe"></script><script async custom-element="amp-image-lightbox" src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-image-lightbox"></script><script async custom-element="amp-lightbox" src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-lightbox"></script><script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-script-0.1.js" crossorigin="anonymous" custom-element="amp-script"></script><link rel="icon" href="/assets/images/favicon_96x96.png"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.1/css/all.css" crossorigin><title>Speed Up GitHub CLI: Custom Completion for ‘gh repo clone’ Command | Chris KY FUNG’s Blog</title><link rel="canonical" href="https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Chris KY Fung"},"dateModified":"2024-12-27T15:12:00+08:00","datePublished":"2024-12-27T15:12:00+08:00","description":"Learn how to supercharge your GitHub CLI experience with custom bash completion for the ‘gh repo clone’ command. Includes step-by-step setup and practical examples.","headline":"Speed Up GitHub CLI: Custom Completion for ‘gh repo clone’ Command","image":{"width":"730","height":"431","url":"https://chriskyfung.github.io/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg","@type":"imageObject"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://chriskyfung.github.io/assets/images/logo-plainSVG.svg"},"name":"Chris KY Fung"},"url":"https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/"}</script><link rel="preconnect dns-prefetch" href="https://www.googletagmanager.com" crossorigin><link rel="preconnect dns-prefetch" href="https://fonts.gstatic.com/" crossorigin><style amp-custom>html{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}kbd,samp{font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#0275d8;text-decoration:none}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:100%;margin:0}optgroup{line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}textarea{overflow:auto}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote,figure{margin:0 0 1rem}img{vertical-align:middle}[role=button],a,area,button,input,label,select,summary,textarea{cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;caption-side:bottom}caption,th{text-align:left}dd,label{margin-bottom:.5rem}label{display:inline-block}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}.lead{font-size:1.25rem;font-weight:300}.small,small{font-size:80%;font-weight:400}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}.figure-caption{font-size:90%;color:#636c72}code,pre{font-size:90%}code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code,pre code{padding:0;color:inherit;background-color:inherit}pre{display:block;margin-top:0;margin-bottom:1rem;color:#292b2c}pre code{font-size:inherit;background-color:transparent;border-radius:0}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto{-webkit-box-flex:0}.col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (min-width:576px){.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-sm-3,.col-sm-4,.col-sm-6,.col-sm-8{-webkit-box-flex:0}.col-sm-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-group{margin-bottom:1rem}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn:disabled{cursor:not-allowed;opacity:.65}.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}.collapsing{height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-item{padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav,.navbar-nav .row{list-style:none}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md,.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md,.navbar-toggleable-md>.container{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse,.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar-toggleable-md .navbar-collapse{width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, .5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.alert,.pagination{border-radius:.25rem}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.modal-open,.model{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}}.clearfix:after{display:block;content:"";clear:both}.justify-content-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (min-width:992px){.float-lg-left{float:left}.float-lg-right{float:right}.float-lg-none{float:none}}.mr-2{margin-right:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.p-0{padding:0}.pt-3{padding-top:1rem}.ml-auto{margin-left:auto}.pr-lg-3{padding-right:1rem}.text-center{text-align:center}body,pre{font-display:swap}body{font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,sans-serif;overflow-x:hidden}.mainheading{padding:0 0 1rem}a{color:#6fd350}a,a:hover{transition:all .2s}pre{-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 1.75em;border:1px solid #e3edf3;width:100%;padding:10px;font-size:14px;white-space:pre;overflow:auto;background:#f7fafb;border-radius:3px;line-height:1.3}.mediumnavigation{background:#fff;transition:top .5s ease-in-out;padding:1.5rem 1rem;box-shadow:0 10px 40px 0 rgba(0,0,0,.05)}.navbar-toggler-right{position:absolute;right:-2%;top:0}.nav-up{box-shadow:none}.site-content{padding-top:2rem;margin-top:57px;transition:all .4s}section{margin-bottom:20px}section.featured-posts{margin-bottom:30px}section.recent-posts{margin-bottom:0}.section-title h2{font-weight:700;font-size:1.4rem;margin-bottom:27px;position:relative}.section-title h2:before{margin-bottom:0;position:absolute;z-index:1;left:15px;right:0;top:12px;height:1px;content:"";background-color:#f5f5f5}.section-title span{background-color:#fff;position:relative;z-index:2;display:inline-block;padding:0 15px 0 0;font-size:14px;text-transform:uppercase;letter-spacing:1px}.layout-page .section-title span{font-size:2rem;text-transform:none;letter-spacing:0}.layout-page .section-title h2:before{top:17px}.article-post ol,.article-post ul{margin-bottom:1.5rem}.prevnextlinks .thepostlink{padding:20px 0;font-size:17px;display:block;color:#111;font-weight:500}.prevnextlinks{border-top:1px solid #eee;border-bottom:1px solid #eee;margin-left:0;margin-right:0}.prevnextlinks .rightborder{border-right:1px solid #eee}.navbar-toggleable-md .navbar-nav .nav-link.highlight{background:#6fd350;color:#fff;border-radius:4px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);padding-left:1em;padding-right:1em}.navbar-toggler{z-index:9999}.navbar-toggleable-md .navbar-nav .nav-link{color:#333;font-size:.94em;font-weight:500;letter-spacing:1px;margin-left:0;margin-top:10px;text-transform:uppercase}.mediumnavigation .dropdown-menu{margin:0 0 15px;box-shadow:none;border:0}.card-columns .card{margin-bottom:20px}.listfeaturedtag .wrapmeta,.listfeaturedtag .wrapthumbnail{position:relative;width:100%;min-height:1px;max-width:100%;-webkit-box-flex:0;-webkit-flex:100%;-ms-flex:100%;flex:100%}.listfeaturedtag .wrapthumbnail{padding:0 15px}.listfeaturedtag .wrapmeta{padding:0}.listfeaturedtag .wrapthumbnail{height:250px}.listfeaturedtag .card{border:0;border-radius:2px;height:calc(100% - 15px);padding-left:0;margin-bottom:15px;box-shadow:1px 2px 14px 0 rgba(0,0,0,.2)}.listfeaturedtag .card-block{padding:20px 20px 50px}.listfeaturedtag .thumbnail{background-size:cover;height:100%;display:block;background-position:38% 22%;background-origin:border-box;border-top-left-radius:2px}.listfeaturedtag .card-title,.listrecent .card-title{font-size:1.3rem;font-weight:500;line-height:1.25}.listfeaturedtag .card-title a,.listrecent .card-title a{color:#111;font-weight:500}.listfeaturedtag .card-title a:hover,.listrecent .card-title a:hover{color:rgba(0,0,0,.6);text-decoration:none}.card-text{color:#666;font-size:.95rem;line-height:1.8;font-weight:400}.listfeaturedtag .wrapfooter{position:absolute;font-size:12px;display:block;width:100%;left:0;right:0;bottom:-15px;margin:auto;padding:0 20px}.listrecent{width:100%}.listrecent .wrapfooter{font-size:12px;margin-top:30px}.author-thumb{width:40px;height:40px;float:left;margin-right:13px;border-radius:100%}.intro h2,.post-top-meta{margin-bottom:1rem;margin-top:3rem}.post-top-meta span{font-size:.9rem;color:rgba(0,0,0,.44)}.post-top-meta .author-thumb{width:72px;height:72px}.post-top-meta.authorpage .author-thumb{margin-top:40px}.post-top-meta .author-description{margin-bottom:5px;margin-top:10px;font-size:.95rem}.author-meta{flex:1 1 auto;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.alertbar form,.bottompagination span.navigation i,.post-top-meta span,.share ul li,div.post-date,span.author-meta,span.post-name{display:inline-block}div.post-date,span.post-read{color:#75748a;margin:7px 0}.share ul li i.fa,span.post-read-more a{width:30px;height:30px;line-height:30px;text-align:center;border-radius:50%}span.post-read-more a{color:#75748a;align-items:center;float:right;border:1px solid #d0d0d0}span.post-name a,span.post-read-more a:hover{color:rgba(0,0,0,.8)}.dot:after{content:"\00b7";margin-left:3px;margin-right:3px}.mainheading h1.sitetitle{font-family:Georgia,Times New Roman,Times,serif;font-display:swap}.mainheading h1.posttitle{font-weight:700;font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif}.intro{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/head.svg);background-size:contain;margin-top:-87px;margin-bottom:3.5rem;padding:3rem 0;position:relative;z-index:1}.intro .btn{background:#fff100;border:0;color:#333;border-radius:3px;font-weight:500;padding:15px 40px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);text-transform:uppercase;font-size:13px;letter-spacing:1px}.intro h1{font-weight:700}.intro h2{margin-top:1rem;color:#888;line-height:1.6}.wrapintro{background:rgba(211,201,255,.871);max-width:90%;width:700px;margin:0 auto;padding:2rem 1rem;text-align:center}.article-post,.link-dark{color:rgba(0,0,0,.8)}.article-post{font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif;font-size:1.1rem;line-height:1.8}.article-post a{color:inherit;text-decoration:none;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a:hover{box-shadow:inset 0 -30px 0 #ffe51f,0 2px 0 #ffe51f;text-decoration:none}blockquote{border-left:4px solid #6fd350;padding:0 20px;font-style:italic;color:rgba(0,0,0,.5)}.article-post blockquote,.article-post p{margin:0 0 1.5rem}.featured-image{display:block;margin-bottom:2rem}.featured-image[fallback]{margin-bottom:0}.article-post amp-iframe,.article-post amp-img,.featured-image{box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.article-post p iframe{margin-bottom:.5rem}.share{text-align:center;display:none}.share p{margin-bottom:10px;font-size:.95rem}.share ul li{margin-bottom:9px}.share ul{padding-left:0;margin-left:0}.share ul li i.fa{border:1px solid #ddd}.svgIcon{vertical-align:middle}.full-width{width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.share,.share a{color:rgba(0,0,0,.44);fill:rgba(0,0,0,.44)}.graybg{background-color:#fafafa;padding:40px 0 46px;position:relative}.listrecent .card{border-radius:4px;margin-bottom:30px;box-shadow:0 0 1px 0 rgba(0,0,0,.14);border:0}.card .img-thumb{border-top-right-radius:4px;border-top-left-radius:4px}.margtop3rem{margin-top:3rem}.sep{height:1px;width:20px;background:#999;margin:0 auto 1.2rem}.btn,.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:15px}.btn{box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-weight:500;cursor:pointer}.btn,a.btn{color:#fff}.btn-group-lg>.btn,.btn-lg{padding:1rem 2rem}.btn-primary{background-color:#675bff;border-color:#483aff}.btn-primary:hover{background-color:#483aff;border-color:#372cd8}.btn.follow{border-color:#6fd350;color:#6fd350;padding:3px 10px;text-align:center;border-radius:999em;font-size:.85rem;display:inline-block;box-shadow:none;font-weight:400}.btn.subscribe{border-color:#1c9963;border-radius:30px;margin-left:10px;text-transform:uppercase}.post-top-meta .btn.follow{margin-left:5px;margin-top:-4px}.alertbar{box-shadow:0 -3px 10px 0 rgba(0,0,0,.0785);position:fixed;bottom:0;left:0;background-color:#fff;width:100%;padding:14px 0;z-index:1;display:none}.alertbar input[type=email]{font-size:.85rem;padding:3px 5px 3px 10px;border-top-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #ddd;border-right:0;margin-right:-10px;height:34px;letter-spacing:.5px;margin-left:5px}.alertbar input[type=submit],.btn.subscribe{background-color:#1c9963;color:#fff;fill:#fff;font-size:.85rem;font-weight:600}.alertbar input[type=submit]{border:1px solid #1c9963;border-radius:0;padding:4px 10px;border-top-right-radius:3px;border-bottom-right-radius:3px;height:34px;letter-spacing:.5px;cursor:pointer}.form-control::-webkit-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5)}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control{border:1px solid #eee;border-radius:0}.authorpage h1{font-weight:700;font-size:30px}.post-top-meta.authorpage .author-thumb{float:none}.authorpage .author-description{font-size:1rem;color:rgba(0,0,0,.6)}.post-top-meta.authorpage,.sociallinks a,span.navigation{text-align:center}.post-top-meta.authorpage .btn.follow{padding:7px 20px;margin-top:10px;margin-left:0;font-size:.9rem}.graybg.authorpage{border-top:1px solid #f0f0f0}.authorpostbox{width:760px;margin:0 auto 1.5rem;max-width:100%}.authorpostbox .img-thumb{width:100%}.sociallinks{margin:1rem 0}.sociallinks a{background:#666;color:#fff;width:22px;height:22px;display:inline-block;line-height:22px;border-radius:50%;font-size:12px}#comments{margin-top:3rem;margin-bottom:1.5rem}#mc_embed_signup .mc-field-group input{text-indent:5%}#mc_embed_signup{font-family:inherit}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.4;margin-top:0;margin-bottom:.5rem}.article-post h1,.article-post h2,.article-post h3,.article-post h4,.article-post h5,.article-post h6{margin-top:2rem;margin-bottom:1rem}.article-post img.shadow{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.3);-moz-box-shadow:0 0 10px 0 rgba(0,0,0,.3);box-shadow:0 0 10px 0 rgba(0,0,0,.3)}img{height:auto}.bottompagination span.navigation a{background:#fff100;color:#333;padding:5px;border-radius:3px;text-transform:none;font-weight:500;letter-spacing:0;min-width:100px;display:inline-block}.pointerup{margin-bottom:-18px;margin-left:49%;font-size:30px}.pointerup i.fa{color:#eaeaea}span.navigation{display:block;font-size:.93rem;font-weight:700;position:relative}span.navigation:before{margin-bottom:0;position:absolute;z-index:1;left:0;right:0;top:12px;height:1px;content:"";background-color:#eee}.pagination{display:inline-block;background:#fff;z-index:1;position:relative;padding:0 20px;font-size:13px;letter-spacing:.5px;font-weight:500;text-transform:uppercase}iframe,img{max-width:100%}.mediumnavigation .form-control{font-size:.8rem;border-radius:30px;overflow:hidden;border:1px solid rgba(0,0,0,.04)}.mediumnavigation .form-inline{margin-left:15px}.mediumnavigation .form-inline .btn{margin-left:-50px;border:0;border-radius:30px;cursor:pointer}.mediumnavigation .form-inline .btn:active,.mediumnavigation .form-inline .btn:hover{background:0 0;color:green}.mediumnavigation .navbar-brand{font-weight:500;padding:0}.dropdown-item{display:block;width:100%;padding:7px 1.5rem}.dropdown-menu,.mediumnavigation .nav-item{font-size:.9rem}.dropdown-menu{display:none;overflow:auto;z-index:1}.dropdown-toggle:focus~.dropdown-menu,.dropdown:hover .dropdown-menu{display:block}.dropdown:focus-within .dropdown-menu{display:block}.mediumnavigation .search-icon{margin-left:-40px;display:inline-block;margin-top:3px;cursor:pointer}.mediumnavigation .navbar-brand img{margin-right:7px;vertical-align:text-bottom;max-width:none}.navbar-collapse{border-top:1px solid #ddd}.navbar-btngroup{flex-wrap:nowrap;justify-content:right;list-style:none;margin-bottom:0;padding-left:0}.navbar-btngroup .btn{margin-left:.5rem}.navbar-nav{max-height:60vh;overflow:auto}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;overflow:hidden}.fixed-top:focus,.fixed-top:hover{overflow-x:visible;overflow-y:visible}.fixed-top:focus-within{overflow-x:visible;overflow-y:visible}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:#eee;border-radius:0 3px 3px 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#888}.searchbox{display:inline;width:calc(100% - 86px)}:root{--space-2:1rem;--space-3:1.5rem}#consent-ui,#consent-ui .container{background:#fff;font-size:.9rem;transition:right .3s ease}#consent-ui h2{display:flex;align-items:center;color:#675bff;font-size:1.6rem;column-gap:.9rem}#consent-ui .description{margin:.6rem auto .9rem}#consent-ui .description p{color:#333}#consent-ui a{color:#675bff}#consent-ui a:hover{color:#483aff;text-decoration:underline}#consent-ui .buttons{max-width:100%;width:300px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.6rem}#consent-ui .button{background-color:#fff;color:#483aff;padding:8px 16px;border:2px solid #675bff;border-radius:4px;cursor:pointer;min-width:max(140px,calc(100% / 2 - 10px));transition:all .2s ease}#consent-ui .button:hover{background-color:#483aff;color:#fff}#consent-ui .button.fill{border:none;background:#675bff;color:#fff}#consent-ui .button.fill:hover{background-color:#483aff}#cookie-consent-banner{padding:.9rem 1.5rem .1rem;display:flex;flex-wrap:wrap;justify-content:space-evenly;column-gap:.9rem}#cookie-consent-banner header{max-width:768px;min-width:min(375px,100%);width:calc(100% - 320px)}#cookie-consent-banner h2{font-size:1.25rem;column-gap:.5rem}#cookie-preference-modal{position:fixed;top:50%;left:50%;max-width:345px;width:100%;border-radius:8px;padding:1.25rem 1.5rem 1.75rem;transform:translate(-50%,-50%);box-shadow:0 5px 10px rgba(0,0,0,.1)}#consent-choices{margin:1rem;display:flex;flex-direction:column}.consentLabel input{margin:.5rem}#post-consent-ui{position:fixed;bottom:50px;left:20px;z-index:99}#post-consent-ui button{border-radius:50%;font-size:1.66rem;width:3rem;height:3rem;padding:0;border:3px solid #483aff}.invitation-codes a{background:linear-gradient(139deg,#ffc92f,#ff185c,#f316d5,#b81ed2);font-family:Arial,Helvetica,sans-serif;font-size:16px;color:#fff;font-weight:700;border-radius:5px;padding:0 10px;height:36px;display:inline-block}.invitation-codes svg{float:left;vertical-align:middle;display:inline;margin-right:4.5px;margin-left:4.5px;padding-top:7px;height:28px}.invitation-codes span{padding:0 12px;vertical-align:middle;float:left;line-height:34px}amp-ad{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png);background-position:50%;background-repeat:no-repeat;background-size:50px}.article-post .anchor-link{visibility:hidden;box-shadow:none;color:#daa520;font-size:1rem;margin-left:.5rem;vertical-align:super}.article-post .anchor-link:hover{box-shadow:none}.anchor-link:focus,.article-post :hover>.anchor-link{visibility:visible}amp-img[aria-label=lightbox]{cursor:zoom-in}amp-image-lightbox img{object-fit:scale-down}amp-image-lightbox button:last-of-type{cursor:zoom-out;min-width:100%;min-height:100%}amp-image-viewer img{max-width:fit-content;transition:width .25s linear}amp-lightbox{background-color:rgba(0,0,0,.6);z-index:1050}a.vglnk{border-bottom:2px dashed grey;box-shadow:unset}.shadow-none,figure.shadow-none *{box-shadow:none}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.7rem}h4{font-size:1.48rem}h5{font-size:1.3rem}h6{font-size:1.25rem}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 2px 0 0 hsla(0,0%,100%,.7);display:inline-block;font-size:.85em;line-height:1;padding:2px 4px;white-space:nowrap}.article-post h2:not(:first-of-type){margin-top:5rem}.article-post del{color:#999;text-decoration-color:#f05f70}.article-post del a{box-shadow:none;border-bottom:1px solid #ddd;text-decoration:inherit}.article-post .box-highlight{box-shadow:1px 2px 15px #675bff}.article-post figcaption{font-size:smaller}.article-post a>code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a.citation,.article-post a.footnote,.article-post a.reversefootnote{box-shadow:none;background-color:#ffe51f}.card .row,.card>a{height:100%}.container{width:96%;max-width:100%}.inline-fix+*{display:inline}.inline-fix+*+.badge{vertical-align:text-top}.listfeaturedtag .card .thumbnail img{width:500px;height:258px}.listfeaturedtag .card-list{width:100%}.listfeaturedtag .card-list .thumbnail img{width:500px;height:150px;object-fit:cover}.listfeaturedtag .card-list .card-title{font-size:1rem}.listfeaturedtag .card-list .wrapthumbnail{height:150px}.mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.thumbnail.fit-left img{object-position:left}.thumbnail.fit-right img{object-position:right}.screen-reader-only{position:absolute;left:-5000px}.screen-reader-only:focus{left:0}.left-sidebar{order:1}.sidebar{font-size:15px;max-width:100%}.sidebar h3,.sidebar h3 span{text-align:center;position:relative}.sidebar h3{font-size:1.3rem;margin-bottom:1rem;font-weight:700}.sidebar h3 span{background-color:#fff;z-index:2;display:inline-block;padding:0 15px;font-size:14px;text-transform:uppercase;letter-spacing:1px}.sidebar h3:before{margin-bottom:0;position:absolute;z-index:1;left:0;top:12px;width:100%;height:1px;content:"";background-color:#333}.sidebar ul{list-style:none;padding-left:0}.sidebar li a{color:#999;border-bottom:1px solid #f6f6f6;display:block;padding-bottom:10px;padding-top:10px}.sidebar-section{margin-bottom:2rem;padding:30px 10px 30px 20px;box-shadow:0 0 1px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup form{padding:0}.sidebar #mc_embed_signup .button{width:100%;background:#675bff;height:auto;padding:6px 20px;font-weight:600;box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup h2{font-weight:400;font-size:15px;color:#999;margin-bottom:1rem;line-height:1.5;text-align:center}.sidebar #mc_embed_signup .mc-field-group,.sidebar #mc_embed_signup input{width:100%}.tags{list-style:none;padding-left:0;margin:0 0 1.5rem}.tags li{display:inline-block;font-size:.9rem;margin-right:.2rem}.tags li:last-child{margin-right:0}.tags li a{background:#fff100;color:#333;padding:3px 10px;border-radius:3px;font-weight:500;font-size:.93em;text-transform:capitalize;text-decoration:none;box-shadow:0 6px 10px 0 hsla(0,0%,65.9%,.1)}.tags li a:hover{background:rgba(0,0,0,.07);text-decoration:none}.tags.rounded-tags li a{background:0 0;border:1px solid;border-radius:20px}.tags.rounded-tags code a{box-shadow:inherit}.beforefooter{background:linear-gradient(rgba(255,241,0,.8),rgba(255,241,0,.8)),url(https://chriskyfung.github.io/images/header-bg.jpg);background-size:contain;background-position-x:center;background-blend-mode:overlay;color:#111;max-width:100%;margin:50px auto -50px;padding:50px 0;text-align:center}@supports (background-blend-mode:overlay){.beforefooter{background-color:#fff100;background-image:url(https://chriskyfung.github.io/images/header-bg.jpg);background-blend-mode:overlay}}.beforefooter h3{margin-bottom:1rem}.footer{background-color:#171e27;border-top:1px solid rgba(0,0,0,.05);color:#999;margin-top:50px;margin-bottom:0;padding:30px 0;text-align:center}.footer a{color:inherit}.footer a:hover{color:#fff;text-decoration:none}.footer amp-ad{max-width:1140px;margin:auto}.footer-bar{padding-top:1.5rem;font-size:.9em}.footer-bar a{color:#eee}.footer .textwidget a{border-bottom:1px dashed}.footer-widget{font-size:15px;margin-top:1rem;margin-bottom:1rem}.footer-widget .title{font-size:18px;text-transform:uppercase;letter-spacing:1px;color:#fff;margin-bottom:1.5rem}.footer-widget ul{list-style:none;padding-left:0}.footer-widget li{margin:12px 0}.footer-widget .recent-posts img{float:left;margin-right:10px}.footer-widget-blob{background:#e9e4ff;border-radius:60% 70% 500% 70%}.footer-widget-image-wrapper{display:block;margin:auto;max-width:350px}.footersocial h3{font-size:1.48rem}.footersocial .fab{width:40px;height:40px;line-height:40px;text-align:center;display:inline-block;background:#fff;border-radius:3px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-size:18px;margin-left:5px;color:#3c3838;margin-top:10px}.bmc-button img{height:34px;width:35px;margin-bottom:1px;box-shadow:none;border:0;vertical-align:middle}.bmc-button{line-height:35px;height:51px;display:inline-flex;background-color:#ff813f;border-radius:5px;border:1px solid transparent;padding:7px 15px 7px 10px;font-size:28px;letter-spacing:.6px;box-shadow:0 1px 2px hsla(0,0%,74.9%,.5);margin:0 auto;font-family:Cookie,cursive;-webkit-box-sizing:border-box;box-sizing:border-box}.bmc-button,.bmc-button:active,.bmc-button:focus,.bmc-button:hover{text-decoration:none;color:#fff;-webkit-box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5)}.bmc-button:active,.bmc-button:focus,.bmc-button:hover{box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5);opacity:.85}@media (min-width:576px){.beforefooter{text-align:left}.bmc-button{font-size:16.5px}.card-columns.listfeaturedtag{-webkit-column-count:2;-moz-column-count:2;column-count:2}.footer{text-align:left}.footer-widget{margin-bottom:3rem;margin-top:3rem}.left-sidebar{order:-1}.listfeaturedtag .card .thumbnail img{left:-50%;max-width:500px;overflow-x:hidden}.listfeaturedtag .card-list .thumbnail img{width:291px}.sidebar{max-width:340px}}@media (min-width:768px){.bmc-button{font-size:28px}.listfeaturedtag .card .thumbnail img{left:-25%}.post-top-meta.authorpage{text-align:left}}@media (min-width:992px){.intro{padding:9rem 0}.intro h2{margin-top:2rem;margin-bottom:2rem}.listfeaturedtag .card{height:260px}.listfeaturedtag .card .thumbnail img{left:-75%}.listfeaturedtag .card-list{height:auto}.listfeaturedtag .card-block{padding-left:0}.listfeaturedtag .wrapfooter{padding-left:0;right:auto}.listfeaturedtag .wrapmeta{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%;margin-left:-3px}.listfeaturedtag .wrapthumbnail{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;max-width:41.666667%;height:258px;flex:0 0 auto}.mediumnavigation .dropdown-menu{box-shadow:0 0 7px rgba(0,0,0,.2);max-height:60vh}.navbar-collapse{border:0}.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.5rem;margin-top:0}.navbar-nav{max-height:60vh;overflow:visible}.wrapintro{padding:3rem}}@media (min-width:1025px){.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.75rem}}@media (min-width:1200px){.container{width:1140px;max-width:100%}.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:1rem}}@supports (object-fit:cover){.listfeaturedtag .card .thumbnail img{left:inherit;max-width:inherit;object-fit:cover}}.gh-style.btn{position:relative;display:inline-block;padding:5px 16px;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;-webkit-appearance:none;appearance:none;color:#24292e;background-color:#fafbfc;border:1px solid rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25);transition:background-color .2s cubic-bezier(.3,0,.5,1)}.gh-style.btn:hover{text-decoration:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{cursor:default}.gh-style.btn.disabled .octicon,.gh-style.btn:disabled .octicon,.gh-style.btn[aria-disabled=true] .octicon{color:inherit}.gh-style.btn i{font-style:normal;font-weight:500;opacity:.75}.gh-style.btn .octicon{margin-right:4px;color:#6a737d;vertical-align:text-bottom}.gh-style.btn .octicon:only-child{margin-right:0}.gh-style.btn .Counter{margin-left:2px;color:inherit;text-shadow:none;vertical-align:top;background-color:rgba(27,31,35,.08)}.gh-style.btn .dropdown-caret{margin-left:4px;opacity:.8}.gh-style.btn.hover,.gh-style.btn:hover,[open]>.gh-style.btn{background-color:#f3f4f6;transition-duration:.1s}.gh-style.btn.selected,.gh-style.btn:active,.gh-style.btn[aria-selected=true]{background-color:#edeff2;box-shadow:inset 0 1px 0 rgba(225,228,232,.2);transition:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{color:#959da5;background-color:#fafbfc;border-color:rgba(27,31,35,.15)}.gh-style.btn.focus,.gh-style.btn:focus{outline:1px dotted transparent;outline-offset:2px;box-shadow:0 0 0 3px rgba(3,102,214,.3)}.gh-style.btn-primary{color:#fff;background-color:#2ea44f;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.hover,.gh-style.btn-primary:hover,[open]>.gh-style.btn-primary{background-color:#2c974b}.gh-style.btn-primary.selected,.gh-style.btn-primary:active,.gh-style.btn-primary[aria-selected=true]{background-color:#2a8f47;box-shadow:inset 0 1px 0 rgba(20,70,32,.2)}.gh-style.btn-primary.disabled,.gh-style.btn-primary:disabled,.gh-style.btn-primary[aria-disabled=true]{color:hsla(0,0%,100%,.8);background-color:#94d3a2;border-color:rgba(27,31,35,.1);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.focus,.gh-style.btn-primary:focus{box-shadow:0 0 0 3px rgba(46,164,79,.4)}.gh-style.btn-primary .Counter{color:inherit;background-color:hsla(0,0%,100%,.2)}.gh-style.btn-primary .octicon{color:hsla(0,0%,100%,.8)}.gh-style.btn-danger{color:#cb2431;transition:none}.gh-style.btn-danger:hover,[open]>.gh-style.btn-danger{color:#fff;background-color:#cb2431;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-danger:hover .Counter,[open]>.gh-style.btn-danger .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-danger:hover .octicon,[open]>.gh-style.btn-danger .octicon{color:inherit}.gh-style.btn-danger.selected,.gh-style.btn-danger:active,.gh-style.btn-danger[aria-selected=true]{color:#fff;background-color:#be222e;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(134,24,29,.2)}.gh-style.btn-danger.disabled,.gh-style.btn-danger:disabled,.gh-style.btn-danger[aria-disabled=true]{color:rgba(203,36,49,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-danger.disabled .Counter,.gh-style.btn-danger:disabled .Counter,.gh-style.btn-danger[aria-disabled=true] .Counter{background-color:rgba(203,36,49,.05)}.gh-style.btn-danger:focus{box-shadow:0 0 0 3px rgba(203,36,49,.4)}.gh-style.btn-danger .Counter{color:inherit;background-color:rgba(203,36,49,.1)}.gh-style.btn-outline{color:#0366d6;transition:none}.gh-style.btn-outline:hover,[open]>.gh-style.btn-outline{color:#fff;background-color:#0366d6;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-outline:hover .Counter,[open]>.gh-style.btn-outline .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-outline:hover .octicon,[open]>.gh-style.btn-outline .octicon{color:inherit}.gh-style.btn-outline.selected,.gh-style.btn-outline:active,.gh-style.btn-outline[aria-selected=true]{color:#fff;background-color:#035fc7;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(5,38,76,.2)}.gh-style.btn-outline.disabled,.gh-style.btn-outline:disabled,.gh-style.btn-outline[aria-disabled=true]{color:rgba(3,102,214,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-outline.disabled .Counter,.gh-style.btn-outline:disabled .Counter,.gh-style.btn-outline[aria-disabled=true] .Counter{background-color:rgba(3,102,214,.05)}.gh-style.btn-outline:focus{box-shadow:0 0 0 3px rgba(3,102,214,.4)}.gh-style.btn-outline .Counter{color:inherit;background-color:rgba(3,102,214,.1)}.gh-style.btn-blue{color:#fff;background-color:#0361cc;background-image:linear-gradient(-180deg,#0679fc,#0361cc 90%)}.gh-style.btn-blue.focus,.gh-style.btn-blue:focus{box-shadow:0 0 0 .2em rgba(6,121,252,.4)}.gh-style.btn-blue.hover,.gh-style.btn-blue:hover{background-color:#035cc2;background-image:linear-gradient(-180deg,#0374f4,#035cc2 90%);background-position:-.5em;border-color:rgba(27,31,35,.5)}.gh-style.btn-blue.selected,.gh-style.btn-blue:active,.gh-style.btn-blue[aria-selected=true],[open]>.gh-style.btn-blue{background-color:#045cc1;background-image:none;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15)}.gh-style.btn-blue.disabled,.gh-style.btn-blue:disabled,.gh-style.btn-blue[aria-disabled=true]{color:hsla(0,0%,100%,.75);background-color:#81b0e6;background-image:none;border-color:rgba(27,31,35,.15);box-shadow:none}.gh-style.btn-blue .Counter{color:#0366d6;background-color:#fff}.gh-style.btn-sm{padding:3px 12px;font-size:12px;line-height:20px}.gh-style.btn-sm .octicon{vertical-align:text-top}.gh-style.btn-large{padding:.75em 1.5em;font-size:inherit;line-height:1.5;border-radius:.5em}.gh-style.btn-block{display:block;width:100%;text-align:center}.gh-style.btnGroup{display:inline-block;vertical-align:middle}.gh-style.btnGroup:before{display:table;content:""}.gh-style.btnGroup:after{display:table;clear:both;content:""}.gh-style.btnGroup+.gh-style.btn,.gh-style.btnGroup+.gh-style.btnGroup{margin-left:4px}.gh-style.btnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.gh-style.btnGroup-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-item:last-child{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-item.selected,.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-item:hover,.gh-style.btnGroup-item[aria-selected=true]{border-right-width:1px}.gh-style.btnGroup-item.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-item.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-parent{float:left}.gh-style.btnGroup-parent:first-child .gh-style.btnGroup-item{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-parent:last-child .gh-style.btnGroup-item{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-right-width:0;border-radius:0}.gh-style.btnGroup-parent.selected .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true] .gh-style.btnGroup-item{border-right-width:1px}.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-parent:active,.gh-style.btnGroup-parent:focus{z-index:1}.gh-style.btn-link{display:inline-block;padding:0;font-size:inherit;color:#0366d6;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}.gh-style.btn-link:hover{text-decoration:underline}.gh-style.btn-link:disabled,.gh-style.btn-link:disabled:hover,.gh-style.btn-link[aria-disabled=true],.gh-style.btn-link[aria-disabled=true]:hover{color:rgba(88,96,105,.5);cursor:default}.gh-style.btn-invisible{color:#0366d6;background-color:transparent;border:0;border-radius:0;box-shadow:none}.gh-style.btn-invisible.selected,.gh-style.btn-invisible.zeroclipboard-is-active,.gh-style.btn-invisible.zeroclipboard-is-hover,.gh-style.btn-invisible:active,.gh-style.btn-invisible:focus,.gh-style.btn-invisible:hover,.gh-style.btn-invisible[aria-selected=true]{color:#0366d6;background:0 0;outline:0;box-shadow:none}.gh-style.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#586069;vertical-align:middle;background:0 0;border:0}.gh-style.btn-octicon:hover{color:#0366d6}.gh-style.btn-octicon.disabled,.gh-style.btn-octicon[aria-disabled=true]{color:#959da5;cursor:default}.gh-style.btn-octicon.disabled:hover,.gh-style.btn-octicon[aria-disabled=true]:hover{color:#959da5}.gh-style.btn-octicon-danger:hover{color:#cb2431}.gh-style.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.gh-style.btn-with-count:focus{z-index:1}.gh-style.btn:focus .icon-sponsor,.gh-style.btn:focus .icon-sponsoring,.gh-style.btn:hover .icon-sponsor,.gh-style.btn:hover .icon-sponsoring,.Label:focus .icon-sponsor,.Label:focus .icon-sponsoring,.Label:hover .icon-sponsor,.Label:hover .icon-sponsoring{transform:scale(1.1)}.icon-sponsor{overflow:visible}.gh-style{position:fixed;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.5}.octicon{display:inline-block;overflow:visible;vertical-align:text-bottom;fill:currentColor}.highlight pre{color:#fff;white-space:pre-wrap}.highlight .hll,.highlight pre{background-color:#333}.highlight .c{color:#080;font-style:italic;background-color:#0f140f}.highlight .err,.highlight .g{color:#fff}.highlight .k{color:#fb660a;font-weight:700}.highlight .l,.highlight .n,.highlight .o,.highlight .p,.highlight .x{color:#fff}.highlight .cm,.highlight .cp{color:#080;font-style:italic;background-color:#0f140f}.highlight .cp{color:#ff0007;font-weight:700}.highlight .c1,.highlight .cs{color:#080;font-style:italic;background-color:#0f140f}.highlight .gd,.highlight .ge,.highlight .gr{color:#fff}.highlight .gh{color:#fff;font-weight:700}.highlight .gi{color:#fff}.highlight .go{color:#444;background-color:#222}.highlight .gp,.highlight .gs{color:#fff}.highlight .gu{color:#fff;font-weight:700}.highlight .gt{color:#fff}.highlight .kc,.highlight .kd,.highlight .kn{color:#fb660a;font-weight:700}.highlight .kp{color:#fb660a}.highlight .kr,.highlight .kt{color:#fb660a;font-weight:700}.highlight .kt{color:#cdcaa9}.highlight .ld{color:#fff}.highlight .m{color:#0086f7;font-weight:700}.highlight .s{color:#0086d2}.highlight .na{color:#ff0086;font-weight:700}.highlight .nb,.highlight .nc{color:#fff}.highlight .no{color:#0086d2}.highlight .nd,.highlight .ne,.highlight .ni{color:#fff}.highlight .nf{color:#ff0086;font-weight:700}.highlight .nl,.highlight .nn,.highlight .nx,.highlight .py{color:#fff}.highlight .nt{color:#fb660a;font-weight:700}.highlight .nv{color:#fb660a}.highlight .ow{color:#fff}.highlight .w{color:#888}.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:#0086f7;font-weight:700}.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .si,.highlight .sr,.highlight .ss,.highlight .sx{color:#0086d2}.highlight .bp{color:#fff}.highlight .vc,.highlight .vg,.highlight .vi{color:#fb660a}.highlight .il{color:#0086f7;font-weight:700}.rouge-table pre{border:0;margin:0}</style><meta name="amp-script-src" content="sha384-n2-YMnb2FkeDk-Ca2pVnoYSR2FqNKqKgTwfK_UI0EAeVRCAHgCDjsecHJpVMv3Sl"></head><body class="layout-post" data-amp-auto-lightbox-disable> +<amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> +</amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> +</div> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> +</li></ul> +<ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <div id="post" class="col-md-8 col-lg-8"> <div class="mainheading"> <div class="after-post-tags"> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <h1 class="posttitle">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</h1> </div> <amp-img data-hero class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="431" layout="responsive" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:59.0411%"></i-amphtml-sizer> <amp-img data-hero fallback class="featured-image i-amphtml-layout-responsive i-amphtml-layout-size-defined" width="730" height="431" layout="responsive" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" i-amphtml-ssr i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:59.0411%"></i-amphtml-sizer><img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg"></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" alt="Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img> <p> <small> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> </small> </p> <div class="article-post"><p>Ever found yourself typing <code class="language-plaintext highlighter-rouge">gh repo clone</code> and struggling to remember repository names? I’ve been there. As a developer who works with dozens of repositories daily, I needed a better solution. That’s why I created a custom completion script that makes the GitHub CLI’s clone command more powerful and user-friendly.</p> <h2 id="why-custom-completion-matters">Why Custom Completion Matters<a class="anchor-link" href="#why-custom-completion-matters"><i class="fas fa-link"></i></a></h2> <p>While the standard <code class="language-plaintext highlighter-rouge">gh repo clone</code> is incredibly useful, it lacks intelligent autocompletion. Here’s what you’re missing:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gh repo clone my<tab> +my-awesome-project my-docker-images my-python-scripts +</code></pre></div></div> <p>I struggled to recall exact repository names, some of which are a mouthful. Then there were the flags that I could never remember. These tiny hurdles added up, hindering productivity, especially for those who constantly work with multiple repositories.</p> <p>Driven by the desire for seamless interaction, I embarked on a quest to enhance my command-line experience. Instead of wrestling with repository names and flags, I decided to create a custom completion script for the <code class="language-plaintext highlighter-rouge">gh repo clone</code> command. The script enables:</p> <ul> <li><strong>Smart Repository Suggestions</strong>: Instantly see matching repositories as you type.</li> <li><strong>Flag Completion</strong>: Access additional <code class="language-plaintext highlighter-rouge">git clone</code> options for <code class="language-plaintext highlighter-rouge">gh repo clone</code> by pressing <code class="language-plaintext highlighter-rouge">tab</code> twice after the <code class="language-plaintext highlighter-rouge">--</code> flag.</li> +</ul> <p>The completion script automatically populates suggestions, enabling faster interaction and execution with the GitHub CLI.</p> <h3 id="common-use-cases">Common Use Cases<a class="anchor-link" href="#common-use-cases"><i class="fas fa-link"></i></a></h3> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Clone to a custom directory</span> +gh repo clone username/repo + +<span class="c"># Clone with a specific branch</span> +gh repo clone username/repo <span class="nt">--</span> <span class="nt">--branch</span> feature-branch + +<span class="c"># Clone with depth limit</span> +gh repo clone username/repo <span class="nt">--</span> <span class="nt">--depth</span> 1 +</code></pre></div></div> <h2 id="quick-setup-guide">Quick Setup Guide<a class="anchor-link" href="#quick-setup-guide"><i class="fas fa-link"></i></a></h2> <ol> <li> <p><strong>Install the completion script</strong>:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-o</span> ~/.gh-repo-clone-completion.bash https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280/raw/.bash_profile +</code></pre></div> </div> <p>You can view the source code and contribute on <a data-vars-event-label="https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280" href="https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280">GitHub Gist</a>.</p> </li> <li> <p><strong>Add to your shell</strong>:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'source ~/.gh-repo-clone-completion.bash'</span> <span class="o">>></span> ~/.bashrc <span class="c"># for bash</span> +<span class="c"># OR</span> +<span class="nb">echo</span> <span class="s1">'source ~/.gh-repo-clone-completion.bash'</span> <span class="o">>></span> ~/.zshrc <span class="c"># for zsh</span> +</code></pre></div> </div> </li> <li> <p><strong>Verify the Setup</strong>:</p> <p>Type <code class="language-plaintext highlighter-rouge">gh repo clone <tab></code> in your terminal. If set up correctly, you should see repository suggestions as you type.</p> <p>Type <code class="language-plaintext highlighter-rouge">gh repo clone -- <tab></code> in your terminal. You should see additional <code class="language-plaintext highlighter-rouge">git clone</code> flags by listing them after <code class="language-plaintext highlighter-rouge">--</code>.</p> </li> +</ol> <h2 id="conclusion">Conclusion<a class="anchor-link" href="#conclusion"><i class="fas fa-link"></i></a></h2> <p>Implementing this custom completion function can transform your GitHub CLI experience by making it more efficient and user-friendly. My coding sessions are now more about creativity and less about the little frustrations.</p> <p>Try it yourself and see how much faster your GitHub workflow becomes. Questions or suggestions? Feel free to contribute to the script on my GitHub!</p> <p>Happy coding! 🚀</p> <div class="clearfix"></div> </div> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="row PageNavigation mt-4 prevnextlinks"><div class="col-md-6 rightborder pl-0"> <a class="thepostlink" href="/blog/qwiklabs/qwiklab-completion-tracker-versions">« Qwiklabs Lab Completion Tracker - Version History</a> </div></div> <div class="row post-top-meta"> <div class="col-md-2"> <amp-img class="author-thumb i-amphtml-layout-fixed i-amphtml-layout-size-defined" width="72" height="72" src="https://www.gravatar.com/avatar/abd876486b2caa54b43bf64a5a86f620?s=250&d=mm&r=x" alt="Chris F." style="width:72px;height:72px;" i-amphtml-layout="fixed"></amp-img> </div> <div class="col-md-10"> <a class="link-dark" href="https://en.gravatar.com/chrisfungky" rel="noopener" target="_blank">Chris F.</a><a href="https://www.facebook.com/chriskyfung/" class="btn follow" rel="noopener" target="_blank">Follow</a> <span class="author-description">Author of this blog, M.Phil.</span> </div> </div> <section> <div id="comments"><div class="disqus"> <amp-iframe width="600" height="580" layout="responsive" data-block-on-consent-purposes="functional" sandbox="allow-scripts allow-same-origin allow-modals allow-popups allow-forms" resizable src="https://chriskyfung.gitlab.io/disqus-amp/?url=https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/&title='Speed+Up+GitHub+CLI%3A+Custom+Completion+for+%27gh+repo+clone%27+Command'" class="i-amphtml-layout-responsive i-amphtml-layout-size-defined" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:96.6667%"></i-amphtml-sizer> <div overflow style="background-color: #0003;display: block;position: relative;"> <button class="btn btn-dark" aria-label="Load more comments" tabindex="0" style="margin: .5em 50%; transform: translateX(-50%);"> Load more </button> </div> <div placeholder>Loading Disqus Comments...</div> <div fallback> Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a> </div> </amp-iframe> +</div></div> </section> </div> <div class="col-md-4 col-lg-4 right-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.jpg" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform">Learning Google Cloud Platform on Qwiklabs: Learning Map, Assisti...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-06-20T23:36:00+08:00" itemprop="dateModified" title="Updated on">20 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> +</div> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></div></div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> +<p>See anything that can be improved?</p> +<p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> +<a class="btn btn-primary btn-lg" href="/contact">Contact Me</a> </div> <div class="col-md-4 text-center footersocial"> <div class="mb-4"> <h3>Support Me</h3> +<a class="bmc-button" href="https://www.buymeacoffee.com/chriskyfung" data-vars-event-label="Buy me a coffee Badge"> <amp-img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" width="35" height="34" layout="fixed" alt aria-hidden="true" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:35px;height:34px;" i-amphtml-layout="fixed"></amp-img> <span style="margin-left:5px;">Buy me a coffee</span> +</a> </div> <div> <h3>Follow Me on</h3><a href="https://www.facebook.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-facebook" aria-hidden="true"></i><span class="sr-only">Facebook</span></a><a href="https://www.pinterest.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-pinterest"></i><span class="sr-only">Pinterest</span></a><a href="https://github.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-github"></i><span class="sr-only">GitHub</span></a><a href="https://medium.com/@chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-medium"></i><span class="sr-only">Medium</span></a> </div> </div> </div> </div> </section> <section class="footer"> <div class="container"> <div class="row"> <div class="col-sm-3"> <div class="footer-widget"> <div class="footer-widget-blob footer-widget-image-wrapper"> <amp-img class="pr-lg-3 i-amphtml-layout-responsive i-amphtml-layout-size-defined" src="/assets/images/knowledge__flatline.svg" height="179" width="255" layout="responsive" alt="ideas and knowledge" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:70.1961%"></i-amphtml-sizer></amp-img> +</div> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title">Disclosures</h3> + +<div id="copyscape-banner"> <a href="https://www.copyscape.com/" data-vars-event-label="Copyscape Badge" aria-label="Copyscape - link opens in a new tab" rel="noopener noreferrer" target="_blank"> <amp-img src="https://banners.copyscape.com/img/copyscape-banner-white-130x46.png" width="130" height="46" alt="© Protected by Copyscape" title="Opens in New Tab" style="width:130px;height:46px;width:130px;height:46px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> </amp-img> </a> +</div> </div> </div> </div> <div class="footer-bar"> <p class="float-lg-left"> Copyright © 2014-2024 <a href="https://chriskyfung.github.io/">Chris KY FUNG</a>. All rights reserved. </p> <p class="float-lg-right">Powered by <a aria-label="theme credit" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/" rel="noopener noreferrer">AMP Affiliately Theme</a> | <a aria-label="privacy policy" href="/privacy-policy">Privacy Policy</a> </p> <div class="clearfix"></div> </div> </div> </section></footer> </div> <amp-image-lightbox id="lightbox1" layout="nodisplay" data-close-button-aria-label="Close" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"></amp-image-lightbox> </body></html> \ No newline at end of file diff --git a/gulpfile.mjs b/gulpfile.mjs index 35d3012fa..4dd5ce8a1 100644 --- a/gulpfile.mjs +++ b/gulpfile.mjs @@ -29,14 +29,14 @@ function build(cb) { function test() { return src('./_site/**/*.html') - // Validate the input and attach the validation result to the "amp" property - // of the file object. - .pipe(gulpAmpValidator.validate()) - // Print the validation results to the console. - .pipe(gulpAmpValidator.format()) - // Exit the process with error code (1) if an AMP validation error - // occurred. - .pipe(gulpAmpValidator.failAfterWarningOrError()); + // Validate the input and attach the validation result to the "amp" property + // of the file object. + .pipe(gulpAmpValidator.validate()) + // Print the validation results to the console. + .pipe(gulpAmpValidator.format()) + // Exit the process with error code (1) if an AMP validation error + // occurred. + .pipe(gulpAmpValidator.failAfterWarningOrError()); } function validate() { @@ -45,18 +45,21 @@ function validate() { through2.obj(async (file, _, cb) => { if (file.isBuffer()) { const validator = await amphtmlValidator.getInstance(); - const result = validator.validateString(file.contents.toString()); - if (result.status !== 'PASS') console.error(`\n${result.status}: ${file.relative}`); - // (result.status === 'PASS' ? console.log : console.error)(result.status); - for (var ii = 0; ii < result.errors.length; ii++) { - var error = result.errors[ii]; - var msg = - 'line ' + error.line + ', col ' + error.col + ': ' + error.message; - if (error.specUrl !== null) { - msg += ' (see ' + error.specUrl + ')'; + const contents_in_string = `${file.contents.toString()}`; + if (contents_in_string.indexOf('<title>Redirecting…</title>') === -1) { + const result = validator.validateString(contents_in_string); + if (result.status !== 'PASS') console.error(`\n${result.status}: ${file.relative}`); + // (result.status === 'PASS' ? console.log : console.error)(result.status); + for (let ii = 0; ii < result.errors.length; ii++) { + const error = result.errors[ii]; + let msg = + 'line ' + error.line + ', col ' + error.col + ': ' + error.message; + if (error.specUrl !== null) { + msg += ' (see ' + error.specUrl + ')'; + } + (error.severity === 'ERROR' ? console.error : console.warn)(msg); } - (error.severity === 'ERROR' ? console.error : console.warn)(msg); - } + }; } cb(null, file); }) diff --git a/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg b/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2abd3f249b50c0c22bc0cdc3ac31a31b53b2971 GIT binary patch literal 138405 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%0DO@Q=q_?C97$*qC0gx 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�~mnldqAe6R(7BTausR6r>PFgb_+|7mbw` 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 literal 0 HcmV?d00001 diff --git a/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg b/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c26e96c2fa7381aa761140265db3afc04473ffc GIT binary patch literal 24238 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%0DtwJc!IpAk#6PiRKZ^p%s-rIU`|O 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 literal 0 HcmV?d00001 diff --git a/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp b/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp new file mode 100644 index 0000000000000000000000000000000000000000..33ded96806353a277da1eeec9d91bd64de792034 GIT binary patch literal 16270 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 E02LLbIsgCw literal 0 HcmV?d00001 diff --git a/images/posts/coding/gh-repo-clone-custom-completion-cover.webp b/images/posts/coding/gh-repo-clone-custom-completion-cover.webp new file mode 100644 index 0000000000000000000000000000000000000000..82bc78247d7ea5382dd22c1435d95cdc196324fb GIT binary patch literal 93436 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	uJVAM65N4~3Qd5vJP0HSb!q0p z31H<+dEHu)YB_Az`VCWfzMYb>c4MhlSKUbNYGT@?9oU_33GsVea{=LYCU`qj48Y`6 zMw(@O<d64e8ITc>IFENso|pL~i>88G=+$UD<TjMFB(TZ;LNIAurlJ)Ucc1zhdpLIY zIURBN>$s;8NP|{<#Xys}u>R6v|JfF~3fiMEql8vv*U|y9d%j(Mq8)@!IHe_jU1h`5 zaW)QW&YNsp9Hrj9>oR6=aa7bIZPMiIsQri3-W?fV-F|Ww(6vBs%iu)#?k?!@b*8sg zGJhPQG3)k!Cs-IiiPvvW)KK4;1}t%~u-zwDfAg0p3nlNTvNvS}v|afm3tammdYgkq z@d5JrY>PPCaZ%vv(@$JdWMWIsoinGYSUKT)HOvacW^4s9K@EU^N275qf1C35UZUNk zw&YuHqi*6Pi}E~iLn(ZW5%THEoD*cL8TmS>3(6kEh#td4Xz=72O~M2fw_lp5N;xj* zFL)rpS&o#v!SQ`;wPZ@!ur2KN^R*Gjv#)cI0+Rf<g?bASKzRw3VXnbu*vw-W*-%&g ze?*VI%&92~5u)R5=MLp}BA}gQc8e;8@v<mCaj*sVk#Qf-D7QZjOzbogOiT3YeJ|#n zgMm2cSwsXz*Nb#KkLc@C(mF*5230f0spf4Tsu2V1XsBvB96ZtHu{BMT;+<9S5D~Sb z*Jr$DcYv@I`-^6>P_%EJBNpxn;v>m01j=tKMtzdFSHVY98+7aj5ncB`Fs+I=Efe7u z&H04w$JBEGfq>>PFj7kBW)A1Y|KJ`|J_#CFaU=0BQqU7sY78Ej(PuzDzFg9a+!sBg zAN-MRNGN4l@_9Go|ICH{jh~aXTUUE7C~M-T>ZhQ(XqFa{j50L0SAF~?6n#bc#zdBH z8zao*ooH9N`v%1Z1+l4aiD+_nrn%_;&2l33QMMY#MIQb-1mE}j%E{!?+tKy!NnY#k z&I}olsG<Q+f`Gzc$J+VY7T%-6AJkt$(<WFvHAm5iTo_q}03$l@*K;8ds#ZK(*?Kjn z3(^yhZxCNqStyX&%1+c<^jj;vb375|+?!WP{=eKK0ej4mg#zpRg{09B36K>EJgsZ$ z^^e|`p3c6|QcnW>E}RfQsaE^5fUtKWU}9+K`(%H0<;Orb>_&*Dr166OB_wRXz#Y6M zeW_*3$tAOBLbq6_dU_-B-D7HlZp_*ZMN73L=kYBzkRrJ|y9w+_f1ad5-GMs%HmSaJ zI0(pNM>(ezc<QNTcMmrOM6qZy?jE%A(d~~G6~q`M))yKR;rbyqyt~H&-kwWoe<-O4 zT>E&@xl3wP(7#t<tEig@t-&L|c>>+Ld7j<V)VAWQC*4;W2)Kx6>ad0}b^=*w`<(44 zRxg?}r<HPEdAatOe$0kjm@3x;6v3~W#R2@-^6`9RoVS^EOe?aA4;)9|I=}wrwxPY6 zm7f&8Saj&CXPCFRL{!d9sw$pCYvkscq)6ceI}(HV_e0woC|4^ZqzavlaPsGhhgM~I zgX6SbmSQ1SKlxSG&0Z=-vXAn+TUEQ9uOyHAkasp{<hgRcF<QEEq)KuY3ZO{c8{(<T z*$B#ZnFUY$U)oMLu1$6N))Qs#)S$RWHPn)Px<&CVzjP>EcN4mpC0+?A*<hE-sDHk^ zy3m_IMa!j>d5$K)bI6Ld?~YzhlT9mWqbj~1pK&&R+YDz!4?5TSau9TQ^$7S)9b-Tn z^H4O@+q1AKI#0<~stFvHX4v4Gr-CSaB16J!P(6SkY%+s;0Y8o9J+44nKOZk-!6Xi! zEc%Q@89ArlVAp{((6f7DOhLX(|A1vbfxo>PkIH`PJ;UNF0M|q+TTLIkWOsWxMt(iQ z9~u%kGbEZXH1XO4a96dqw%x-l5hkR^$>k@(Fi&=h4>-VkE+ukAr$hczm*6;k8ICKM zfyEhzn9_IV%x5x6A}-ztNJ6Wu>q^^|w~K?t<I4TzNMYrT8dS2N#7~P(C}f{zBhh<U z<e|GcF+Sci0;Hpf&tPb5`f75v!0MU^Q14<Q93uOKr)?}TQ|Ji}{VT8`CR&0Ky9QQ@ z^J{rW{S&=l7Hl3phVmgLDkPpE<b&+<?f^OSQsuKBx#-qpe`~cyW@a8fv}pBgj$vEJ z2rxAo=R|;<sW^saZINE+!3yR_)E4Q{bx)lCAT(2Id_6e6-kZ!^uXw<cj1ezUG{O$h zdN?=HfyQvgL=OX(Ss2orfE25psxjr)J%^L91bsLz;so4Z*#TsD+w@XBa0u!vrfSp) zE8OL%X#;zA<6J;XK@btr-2o%wivArs4T&-k6W`o<eg4RZxnIQ4V#o3}#R0_H*ZH6L z8a|v{W*U0GO_O$eM$tikQOC|0#%8(G=rEk`Ei?EbG2U{F^d6P_pKGMj0mt3mr{<GX z=K1)qrEPLvyZ|l=<jACU(>L<;TMbcX^1=Xf%}kBlF!Z&veFRqa6p*O1@G~~|w*6jC zIw7};C698y0|iIgtjtb?qD`Z3nKshD3@~s*;4ugXpjV|{f2X5uMHHjw5p?`WSGH%H zbOIKtPPu*)q0ro8l+U!4|1p_&v|GfmF6Uz!%28)<bEye*Uv26$;YkEUW<vW07JZ*f zEdijbY>j^eLf$P6#G#zAAAc|7!Zfw0Lzc}<Qjw}TtJ1Oa_rmSNY0qOuWrAS6fx9!^ zdq>q1*il1ln&tqVFtbRa`dk6tTzgR@rti!Um+j5)Q9Rw7&tYFAe@S7Z`(ywlY*>MO zGVPm07XSEWeGgF>l7};RQ2HsR2q->z_v%7iA>Z+Z_d&Gkevze;gR1%K&~syTnM%7g zXGWWJYG`ls_swzj6BH|sB#jY$1$1s@qk-NZ5@8Mr$VK>B<3GxKXbG!t^gp46XI!*W zafJyID?8Ay0@S!!<W6FwxD(^e6S(7vbRH8!82@DD=Yt)%)+?8a?xD~>&@9|)?|ug1 z_cA@QaK%QZDe!cPL9=z{_ymbn+%7G>&-)Sx`pT00^SMsy+oHP_uW7xSk9l$IDtu~) z|1Aq)<?bYz1p%_Ui<H4hdu(RTci^Gsf4A<jeADbZ=i+iNYys<^JLW)BcB&i5`be8{ zmt^Sq&lh=ts2NMTs)*`t`%@^^nWW03v!~HCIpm~PE*FGjsaPP-x3XJ_<0*ywR4l)l z86x64+%QfpQ#)u~Lm;CbpM2IT&4NX5%XMa2rGCP_mqLW3gkI5v8Dn&OuwmxZm}8)| zVzkEUdU^jQz?LuIam68J3L@d&4q{!`oZGEs&ipRyQUFuH%?nQP$dV!D?^?1fU$s#~ zCQb1b-lZ6u`t+b{I{c1-B;GCA1W3|s!?&xD;4votwtyV79g&wgu<~d0(+s#RJgp1N z{Cu;~l<`9TNl}e>ryF#YJfh5*(0HcK?>kr{0W@VG%05wW?Sn_N24>mBOQ13ZT2UIx z_Tu*X(|js<CWL&EFfb$g-pcGQCCK?u7znBO0R+S!N}|FXdVc})Q2#roPm>99W*qQD zCxQ?|z@)m6e*YyJ`n+%jQVFYsAMyfwvh<|wB9F0qq<Ou8H!7$g61o0;_4?@>=W?wo zMwsHDHG&HHQ?I|*^hn@B0?tEX*yd>+iYUm3!-qK&>vWv%ub}(xX$5do*2>ytI+C&4 zRA0g25v5>72Fjm01lm-(N1#<Zxmizo2k}2s!6myi&cqD)=dJ&WN708p>LqEN<t5E$ z-G0n1MAvlL%{rhJ58!5R+ch6#Qn>*YFYmLi?s>~aB%bOrhrd_*K*Qamai4!qAQ_e< z#%S`n%!5am7VknfH~|cd8Nq~wXpH^cpw$uf49m1#HTZH$|NBpvW5vlI@(Mz2D0`el zEN^Eior9H2ew4=RtnGbI5tLim3U#>umsT<aTL})|fg@BD3rFM^D<42tj{_8kTrmWc z5}ks6&AUi494}>&AbJ>(;1L@;(+M;dKwdU7D*fM)k3lS3%0dEU2YQ%7*_(boG6*h) zz+_h3y9%+~%wlG=Jbf;hp2RXxUNb1T7N!|s8Zsd^V7POe*JSyx;ay~R#LcYmqXWMC zbC9LM_$#U&d6C`stMXz=knwJ@5kpCgyTzXjNAKLTAwe}0{386r723@S=Kgi!)E3(} zcp<VU%7w4pV$$CTK*ola8?M5ppm3NvuKce`tdS)9vi?`?w|nA)`;P|A(MsNc&ioYA z^)|OfF(Z3Zg%t!d+@9cE3qTK|#pbf`!7q}x4Jf<2j^#4P(T*-;6I&TUd=$W^NfrW? z!Jv-VMr{mUIbfi5UqN^&cz-;^-5ApM44^s!S+p+?!@2h++Z?PyJY{z_sLfI**4>+D zq`_~-s+Cqqf(S{otO|lYcy8*|MR@G!a`}tyNlUOAy_V{rh~wkn5gE*ZJArHNN}KJR zu!<Fm;~S>v;D8DZHDXh&gCyb(_U9&bQdZ|txKD6>!xlCh2zi`Jt7*%ZelIpUfe|~; zFdiX_zyNjq>oh6`n=Ve92(j-Z0TRJw%Cd+u72F$xKbL1#HyU5H9JNSgX<6e%_!Cj| zZC+lSzY+P-zHt_AS3^49Pp288Je4}@EDC%E9mk&7p6ThgA+AQWZlv~8r|xLMw?GGg z^*^1<TUZkpIGM&Ua~d@QSzid9rKF$$y}#N+w+s^r6qz2o;ngcZ?u7$do*C~=0S1>< z$l>8)g8&s#4u<(2qc1H~$uuxr<gNK8E|u`~Je<e^5r|wY?&%y4*A&qJ`VFm2@;mhm zyVzsMSl6e|t!VT{(+#&`t08KIunn07QF0uX;)OO@(gfs&_e$3Ysc@=Z1Ne=)+tIi~ zj&uvHM0V{43jU&lqEO=Ks~&6K7bT(6Ulb*IAP$sKx_nsPigZD-7e4k5fbC5^snY!R z4{ttbTHP$fRB0kuD9@h(q<<I|ThO12@4q~Wou<`+a_7S%6DqPDJl=!}h@SX7r`k6K zphYwita`nT+kLAXFhRBlq1PLB=Gd>&kr$J=D<Kb}R#?0C%*eb^GIr84cGNM_sFM<# zVN<ocI@0i_m)C&7KZIe3(qOjqC$%w4hp2#ZOXMdT48BMYrIK48r(y70A2?{tUX6Sp z*X<(obWqk)QoP8WP4YYVoH4j?2auBbo19E>$Kh^jK3leC?rKJ_fUVM?3=xN0gLH@2 z!;S>PxW#uaas5iUVkhVh%p5>7%dvHN3<udZM_)t09AsMo<S&YQv=Ax0QeiQvI4>P4 zGa)^?ML-%xIU{RbrrAo1<aIW?c^S-s>*c{lT}q<hV%N+xCH&FlBlV!o-^y;ur^3I8 zN_9Rbf*=KV>7Z-Zy9^&d_ZL~8Tr=JU@RjQqZs+6F7vQF&&Bkj@M$kDE_&v1(rNl<H zG@<nr|0zyT%+)+R`ky3vXvY#5cYq%;kT#vZnE3tu$8Ec!FY|9cPk=HA1YT@xn&67` zLaqmM0GJp`$(|<lUmY$$Ksp5lKoRK}OX2s~9wFdB?XU!E-hjOjna~ZzMF|r*<HCu@ z+)wkfkcK^PK9Pr+<Yh2SLB@QyL3K4mmx@vGY|_dlut{>QWVg@bvFU^AvH;aSfQk^V zGLO&)RS}u60K_{qL+~MZr!%QngDXHA!CEJJ>5UCv-re9N6k4age}}7UK)SmGc{AgF zZs)=%ifwL9vMl__pIx*Y)&+nC&&LvLtM>-8dHfH3*yRMF-rP86S+u{J1K37zstv-e zQFE+*sp?vZpQm6&@M9mnD>xMNwRyB=>qp<hXx7(eHsoL$Sag7zdTDsrjxo~nZh+Y* z{mm(Eqs9X~HYFYA$KMm2r*g}@^4IAt{#`V{vcD?N<jR|xqMKXh$J~P|c$KE_C#=GV zCm2~y>@#Y15<jopE6=Ja)=V$gHb6`COBu?E#BKq{`z-=-vANM81){||MNG=WC&nWx zFdT4v*VZD`pqB0RA-kEz`xG;J4N#lzM${5H=$^=vq>~f<cdR{ZgZmkwdz=2+^a#@Z z#x^bJ;8<k6Ou%L+*LM$M0fMZ-phWRwta%KFY-(VZX7?4DZ+K$r88q_@x{+eW%`Iwh zSpi-V{Gg=LfBteCVS*IDvUkwY8^hn}4fxV1idcoI`DDt^8K3yt|81h#8EZS|TlS%k zxkXetoWe1_1cqK*)K1oQo1`PuOg{Mf%alnd#8ZvhC1p?N2VOG!G(7v+!5NfFi$H`( zC0NH$`KXH|BAo8075{lNT1%nQ8Gp!He&HfmeYF@1^&+W7LA0}kCcHz*Se$uTwJ1_M zflDl(V+%IGo$<l_q9L%nm3+du%5)FgO#HLn@K8f*LlvU03UMLb=z%j~g>LiD+3E_k zwbHYd5-W!)PL`dZaaHAfgjvMD<>m>YUt{QJT-RbT^D_K;JW5wCJC4ntie3jlqdgk1 zv!w}`3|{5Qf$=1Eau&I5S`I#o(M9@zQJuLo6iEl@pE#iqGXpCsK%!helTRusP2)#R zfN`6LGUWb&4~<(4WzC0|&p-dv{#1a<N-k(;tDU<jlo^Ja98Wz;GFS{4#&}u}tiw4W z9UZ6V{b63=bFA0v@qf!-b}Wex(@}CK;Zy|~l4^h)>|Zg(Cs12cO=g}kc<(M-swZc& z!}EcB&PEZ5#T@5`rwk3s(_dGR{>ALqu2ICxc5Nlkbn=D-$PBRpbmdguonXW=neC}y z$vj(v(xuGX-6kzmjQ8JjG3DDK*xUQmc!0>M@IbD=e<=;CwRD%K6JeB5{zYt9krg`P z?;tZHkw{cyl+1LxiAw*kbxhQOdeOLx<irx1%;f|!33Ne)YMkf~V*;)M7ed7hIfpz! zfPs2gF98QYjr8E+!zjKg2p<q&4}UEqxT7ZcH%eVy@=@;Qq+jX%_<BhRfMH3q?`oyp zo9_Iv^5I32zSWUPBrY&mtjN{-oU0E#v9hSZ()8xjx9E7o&h1awV6rk1{80rUIdMN+ zPmSt*r+3PY37=>|?MP&ke=#ivi1)bURy(;fO`2>aqpqOUaHjGzaUojWDu=wp?^?C- z&|V!O3{AoY&$VTTUb?=P0CU8KDDe6jFuE@6gW`wP;Y38jC`RknE3cyigMVARgqx$< zo~kCOwZDjG&(mNuWoG+5l`P@Q-_3-P%R|vy&G7Q+(4Yu|TMfteEHgcc+rRhFeUHHQ zHTa6IJFydL8wOPZG~`8h*H?1v3)loLc}@%Lk<i+B7Bam?zEC?l`z@V6BLwIeQ5H4) zGy*sC2VCWU63jKbmoJ_G8m$_H4SFW&Zkqr$YJc!uS6Z2=vRmQPdRTnp9AmtRA6iS8 z5sSVyW!lPdQ5}x@q&F4#l#s%TZPwWVHN}h4K`&k!0ZnuN7@||v)+^fExDL#p9KShQ zC0py*(WisrXJ96>#>WUMEBl>*-Ewz7x@x9l#perBcTbZQJtgL%_~eg+!d7u21Q*Y< zE!Xq|abo3UwI1lD=Vi3wLD@^!VeWU-G#ZYH&wLXr5KUx`^7JJHrCMN<pMqWS*XLA# z{J&6NC62^qMXu+;n)w`K$nHwdALCQn+89mPD*rhtt&&-Z7f>i&wdVCemC(^T9_=RQ z8k+2v*MRfM=DT4DzKn3R$dE_d{{u5xvHt^n7Y6o&;FSKTSv*5f;V;RpuTu<kDAaj; zWz)N`pyVot2kN9^bNoFbqu|V6wmoU_K8!lGBw}?WGxs-9RRC@cBHWGfw7wplMA6LK zy0r5eF;Yi8yAc^@83AZcu5g|?3)Gb$wWYU1apAd!1xzZvYS}f*C34iqkA_#hEF#~e zOad?-KA)FqdCM2%5QNq^yJOaJf5-Us34=l0gkVM|#s>EjY%X&U@OETvaWYXz-gM*1 zYp4e-LoC{E{S61yq9&M&-e1VnnDF{CZ?9oVxOofwFV6!WPBTsg%zU<P@r2e7!!7w% z)oYa8P+mM?cCJy5hjbG6pGO-6jl4a6y>h-_N~Ba377uKyBA)jTH7I}GVCZ%(A;WP^ zOv~t!rd2F~(IZ_hGh+t9ih8r(;ic*9(1ZClt69gx%4+C39W^jtEU8*U1>)vlh?{#p zANIU*d2fX22+*tO<5v>&PvI8q$Cj40IwXT|D*a~W5DyV@7-6y#yqo@=L(7J}S(_&1 zL^;SyLguHiTm4MuO=fqO5)FA_gKOe%K&K{>eGJ_EuxOY$oMo4`+x9$-xF5~FG@-gr zW6E?G6l#MBqBs91T(Xu^P&@Q3HBbP!TCQ@q{7h;E)F7e_Dr~eB1fW5EyAwPH*F1Rj z0D><Mh5@{-9l~o`ke8pq#;PTOr+X$^BMZL|_M!X<%p%DP!y<92&#taW8g+{7(nn(N z-LjZ-G{;ef6S!(eI4K(Nr_|@%W4=vf%KUMMlU+pFY+T17c|Cr=5@g}c$c&P>Sf32N zDMIjU0)&9>&2@nAmz+-P_jGTGdybJUno5K7<A(7}&cV&W`iHea;!yr+<I9|)>T9^# z<c{x_nA$+U3{hB0t+HyeFHlCHHp1S*6M4Nhuv6p;!9;RLp?9MIp#_CsRl|R@7SnAB z75|cwBVm3{>KiItvICRUGNN9gASRuYD6YPr43~k-VV5#YBEx#wr4W&>pILrZ0^0i- z4Z>_Sx~)D=`!C2B7F2F!Phjr$WENJV8>|v%*+_x&jhl@o%bY1@C+LW$z4ih=*okL7 zD;by@qi=m|jNVnL-usK&ff?xybN|4B`?oZpz7>vud!#qBE<Y=aXmGx`KhmcZAdNrF zEp@UgZ0rE*HZv4r#t86Hf{>w3)0yO^DbyQZSK5=Vc!677YU<iE*p_Wieb3=tkLss? zH!!y5=t4&XMNg*a<fRGyKByuDdMz%o(i6Eu&x^A~Yj@|z`Z7H_${Knq6AzX$-;wzJ z(VhO62!+15$4<UP5>cjw=b%eXy9HLt73v=pkYmAm^3QGSuESI-zRP%pNL}#NPD9Y; zk{J%>PqTvWW?nqg^XrgVXgFC{U!TwMt-mP@UM-$=M5LKpRT_$jwAUs>(e*EOHa&6P z`6R6J;xbRxK{s7Kf&ctiD^=hV_eoWoWx-DGm5rrbgZHpy;QKR}8L$*cowhRQ@%BhT zn;fWgQ?kHS`S36W=93tMTZ2gqnM~#4Go%ry-nrxwKL&FTZPm(j#%Gb)hRW2uk9=)G zRlg+j_iB4%?7GStk1#wpQ>G=*+WYXRDHNKT=5f)@NMy4H(QOFdhQf@A4v(?yS^Ghw zwcI^f2VQ)m`LO8(*sQ{?X%@Ts6~U%c*EXOrUj-lXu@sKhpHZaUXv&2^*iAL#C?5SW zzDi}$UYTQm&823fXvKEbKE-O1046j_WgJABMRZ)DbTcF+Un)*V<JQc@)`nHMM=M8X zSejUK{CcWjl9$44Dx?&o7m-Guw0cVh&Hs!Wo#tn(PjfqaW_)J!Q;31P#<o2NScVf- zE!x$0OK0W&z4A?}K%+h5i<Ne*_kM?ObIiy;Jjzs6{MaA?Vw&)Z6CbZ>!-19O6RP-C zm5EkJ-`waWk~Oi~_yq~xn>RlosR`EJmz{OBYQBnmn@1K8xQjQ<5+CnHL4`BmQooH@ z%-piREI_{9Q>eUZXai&%&6XEtZ`lMh94}}-?#Qat`95_0E2Z|`8Ka+(EW~_!VANsi z8j-28ZjA8{ewT+_&Qr3DKbLR14`qUPIrW6!qG;<T?y>SQ3+i^<fa0`$tK9Kvj=eaA z{dG%mjT6oZJRTaj5HZXggVu=T6@<e?+`fiUzWDXm>8^%{$B+7M6^Zv<5yURU+HZPD z85JulumcUNL)1ayCf|xzDgR*pWEn?509_YwOa|!37A~!Z0>h)1d07NiDJdGkhP)u? zDB<Lm$S|`zN;YO3<^SiQC*-L8X8iOff&>v~d?9b1r{j=5jCXZ5_KOt#fV3<;5g-3( zDp%?{YdYHcYHs|Wic(hJ39Fb@P9Q0|>obkGw}@}TaTa7Vp3%|0k6)9HzCGfJOuhI3 zJ_43)8y-i^cmX6|6`L95nckGcr_XJE&;&rIWk3<7Vs)-(R4-VPMu(|7@!*t40g0v7 zcV0RXSRpg%C^;=>8cblH;=QH=Wt}w4S~p-|XBy>)LKM^A2W!ie?Oy0YFuNv2W;&>t zA30%<hEb2!ZIM%Q`;J+z;z+5D-Ek*6`ir+O#J#-xb&0AVO*5qu_DgL@9FrIv0I_g2 z$OkMU2(Zsq1mZv?V=_b;-D1$kKe*`4n6CFpRm*0Shuq!9$UsXCQYCcmntul8y#j*z zPq^Dl4Mp$^ik9Q1O7JG08BHI4Hbuz-Qw+v*toj8<j&Xe2bm3rO4}+1AXRzF>bw~U< zpbzEwX%OOZKiyf<uhS;Ld30ifYlm=0*pej3sI>g-)Ie8tx@a?s?4ywu_J<!f4mAb| z`vXeS-|H$Udjd!Cwx{W8`KE5l9u7jN(F&-zL@jn_i*9tJtn+z(Mixs%Uw~#BtGcVo z&+hRv1!{8Z)p*_O1xA?|<<agI`O7a1Wt4%_%J4K)hr;`Q7Tg0n)R?p*L=OYMZpm+Y zR2AhculT&8g6y`iwyH^{#lN2s3_-U}bgsR}Y?E!0$J1$sNr%n;)*cQ6P~<|Mwcg%_ z`f!BN^_vT6c+)Rvtu%n|@=O(ATN?Zqpc=|bLBgQln_0%S(+dn%ObrktH}W`nhAjVx zRpGaVc3lIWTGCQIbci;htOW2Vt-Dub8*y5*T&-hA(3?KF_8LU?w45a|@4A-I)?9vA zzLQR}FNP9TO6P~0`QR;}O;+MYXm|Y-pRPi#0&Ks#!SADpDz^F57@(~70a?urQHEAZ z&?=lP?~fL)4&cJVGgu?Kh-WgWUL1c7-ws3N!um~#uIT^dq_`)Jr@78m)QC1Ickie? zwT!`0)dlaCnL<HuPdlBlJ~FCXj7MikggUu!;&_Vk35e$rh`u}|MHps(jPGLYsWY5L zRL}`>5TvI4yHPVTZjj@96*#Z#9@DA!^P*D(cAPW?zDVm+A=zkE!G`?a7rwKnjm>tm zv4Q+*Hf?Z@#xj6oUMZze_o`gku9Sw^bQgxA2NBfJziCqVJwdfw_tVGN4puMO65CNi zUZl`?fRYJ~C177857Y*D-_0MA3o+oFTwdsm?dEkr{SmN#5>sb<Qt<Fmi;&Ju-}7F% zSA43p8Kf9Ch?&k?1g@h>4m;8V^D_tm=x_4HGdLL!I=A$AD`K$ca(SN~n3S+g`p=LF zZG9B-p$A-iFN3cox6il1pu+`I4F#JXhL?Lr*?ZQ{S#iddLARK{#s7X|LTgzS5mNvV zz2Yhl!LH4*8<SB@J&?|AbZz%+_3uU>)%Dm>ZE4dk={x$!ashs7C~yt&`AA&2ts*6G zZ5!V7Z=9rC?jPFbK}rUI?jw++1#Eq51`RD>=I-^_A%ExiFb<Mh!`n_mi)Z_W|IL!u z)3_KrboPNEEMO+M1ScG1btRYuh!3kz@paB~vkLJ68=uXqH=PYIRFuFNY4w*<qI_$$ ze&h1V$`w@jiIK0p@z=R?ht+--79Zf{U8&kgs2!lH59(x15SSl|cTU%Z8RXB#bQh?i zXMe%|C-qJeI!rvTO}G$FwV2Fr5OU=b1)Mu;8V6bNenLyJv6qL`&P`kDV;>?<D_T;j zBa{7v9*nad;W$7mQ!^{h1loLGZC-eeG@)2MuLNI+ogz=%&?`q(M)xv^hKVjnHpOFd z)bn9M4OQquwY(wme3p9<EZruLgih*beA*Zr4JH*<!J=I|Nz>e(h6NLl@uxi<qo7x1 z=kOTsLWbNc**QSB;|XYUk$eW52TByP8?q1gq@z8|7+CRs!|(Q$?vTEqhpktzf4>|t z)K}|jKG@!~8jgzqNoYQxqwLeiMRw{*M68{j5+n@T3;U^mCyK>`EC)NgC$Y|b=UpvN zRzozvhTpYHz&|yI@_Nw7JF^YDL@-@$9xjAeObPytz%|eHw&|1^d{8rqn~3LHgHoEq zt+mX*UI`cCNI$2)M0=ByVy9I?4nc1CGT*$L=5ffKy_8~dD4xCLbm|b@h0?_p;`Hn@ z9FQyRR*=Jp{k3w;e3et5DN2v`T=-1qCNK?zrMBnyM%Zw&XBEz>sEUi1JkSR9<hn`l z=>ZT~u{*NWov-|r<f6YS50KYJSFldr#PA|-U4Rtcd9(*%{IakWBM#nQLRNK{HY45{ zJprv6Z7#%`(WuXL!9iO`3pL(tq;dd=ni^`r0Q7v?#RM~k`tRi}vNhRD?CaVM!UK>U z440n7-jM@J!+)ft&`_oQPvTe_os6N$AB*?=xl!$V9d_x4ZgFbY^;&*8v-EG*S+ifQ zr<U2#cb>2chJn2z0G^6EPW;uX<|WCGnyj%VGQ_P_-gdq_&6vL=#(4_Y+C}`B-96tN z+gEy4`R;>A)#0$4qbk+jev{55^M+Lj=yCf4I|jJ7e&vf{x1weI66N{ri$w09!y#>y z<G>a~9MP{kf_hISBTA~~Jh6`LWKJT&t#|%2h2~S%eim^wA{{k}v#N5icq=0H>@!7@ z5nObc6rR~hd_D*FH_^}QWXwvgH9`9$b79&fYiA;+QS^)glUUkJvA`G9#9qXBSj%fT zvRcC@xAg2oJzvkO-@-1$Z{aq=2w@GZ-%?8YLKKs_4h9)iD^XXeAmfy9cEMKKRhE7R zV~WW+$-~&Cfcd?WzWOHM<HUYNbC`s>fYUnuTfDiE@CFJ*9=5wf#;tw)ecy9{OD8Hv ze%tm`d2M<cT8$E!h_0FZaFsE6I?e>5$kxhRAmEf-leZ19GTq+mJnsTH4RRZVK{0xE z*>cs&g$aT6Xfd26M}aD{79zwcQqN`;GSO@f%pCmPlobvH@;WFAxf&mKJ)E^3OsZOk zl4`w+o5$YqlnqHhCx{=ajCn-_ZNe5A&a^G$$xCQzu4WiD25o=v+x(Px&dmFyG9U#) zjneXLRg+l7RMAQat44B#WFLz|u5;}fVM*azJj<?HM9k8!zKgF*Kzd*E9i%aTJvi`` zpM~13+wO9hwFYO!UK#3Vo*yWCc7zVu42Dlo`Eqi#;fog(b$}pGjR$zYmB294_^{W7 z1Nj~crRZLj8F)cP5@O<=Dg1e9a(tTfBW;b&FVY^>MJ`)C@Mv8A>=65LDPn0b%~&uJ z<)iMI%YH^%Yl|tPsYwDvGogY%yxD8Y98<4d5;0M4Lsos0)V>WnGY=qbKHw%X)`GU! z#1F0~KDpNi40!z#K$P<5I2Evvfmi;y^qA@^87*2BRPdKMBD3ie;Ff`aQ8*BVpGcfc zcdvIOia;)-F<iT?BL>UUxIMh3Zsy8Xm(1H6P5a_=F%_pXEvjuo77}^-H;i+8pk1my z#24PNu(LdZl?Ln!xgG06Gzs>^3UPrfwES#eK^b_Fh=x68hEOHzQj{LC*z1?m;=znb zoJxGgqsi0z`?S;O+>$V|*jz%?0~B!=hVyzo_Q4>l#+V+%6}&w{9FqYxzbb!E5$w)> z{*kcgDFXgJG<qfDrTvQ@EY_efl9Vl)=y8~$OqO)>dxTwRQ|DyU1D$j<NJIA{IdiWT zb0HI`;}W7uuO2u+g(Q!NCcCZGPQ_g#mqw}Zf~Ny(E>VjG8OG)-R1o$ce}Si;P!~*t zMb1Xenu{O|(F3DGQ=uVi8=DE@ukv!#ziG3zx<d$Ez@_mp`sKomzp*j@E}~}LTJqxR zX5!p`!#X4DltlI?1q$@O6|O8e<2H)oGWH>TCz0SSVDA9@o9OG5_V$;?{2yKAj6^m7 zXA2t2jR@hJ{PsBV@e10H7ZG{t=?ieizIk~v!s};AD(!Lcaq^o)kX!IWAVFQ-Yg6~e z9A@DJYqw>g&^+k4`~K6y5?4FP?pcsf4K3gEzPZnW5W%{UbFwBwOW91fO;`7$_J_6q z?R-Qw;AdR3S0H3qeM=`uE7X>PuRj<NrJ7dF_;Y!MAhW~xEnJk4_50qL>|T#$BsptC zU#K=#A&hhD2u(NA2z4T*vy24V=S1c@39W%N0R;*j7(F6|Gl$x+ucH9x|8YmYM;kkb zl*(CZh-G`5I5olOXyunb2`R4l)qW39rOw+&`7B{LOMv%@qkOKpFU9tU!b*p!e!!$= zh9ZX|$CmhegsT+L_e_YH4kdoh(TQdv`>O-$a7s6(w@U*X4v>L0cVjtfkoM*gSQCAa zgczmO(!@_kNj)<`VD<wg&_!ptp{6@<Xc56Zj5NmQ+Gg=+7$`0hDj<h^>_CD1xLA5v z2I;XLT{m;8!9ygb6DtzorBe%BxL*Cu>Rn>)^)pKMaN)*m@+OSmxU{oCrFdhrrNX_v z<A;V4gi;xAVf-Rz=l+3M{Qc2}7ZSm`$NldE=j~HS3CzK>L?D=N5(-!@2$<fOW`lQu zn6b)$2a5C)bh`_52LRq!&W_Xki@TAxo+XaCoG&ygKd~MNu^aaQhIVANzYNf(c~v_Z zd2LpYIPrP4?42$!tN(hIz#i*DPR&9U&h%xv^e->&p-%tV$2lH!)*3xsrGo@tbH^jX zG>DQyeiR}%bIOYc$HL=lqq_J&HII^a(QTMi3u&&IVWGo8cT1=42{L=Nj3s}L`k9wm z*GJV&>hM93&O_X^*huz&>bEFocVc~U!XZKhK36#x0d}Wcv*z{j{lu-OXSm??vLGhB zTaxkeR1@|_GP-PaMb6}i>r$=N3B^(mr`Kwg7f`3eJNfUQ-#VatEA-_suoIvapghl+ z&H9oPT8W-2v0RUxM}9D%U3V`$rzTF#9+`)Dm+nQ(KB4jEb!6t5Y(JEG&mZW)$*@*Q zc_${UVhh`*mjActaYWvb>~CSLk<l`Ol;1D*Xlm!bg;_+f<j(*PmIY{)QqeC<k`+l# zFhj#T%?FB>WB#>@iJVtts?94vl9n^{ox{+$W#V>t#*;`iDV^9Bbo<mSN<VOtst(}C zc@et<Bw=(4lba&XklFj>)&pTZpjee1Z50<<D@8kJ#>nxO!B|c$T_$zGLKnM&M0}(~ zrm~ys<N!ZFz`t22tqgQ}!vP-Q;p?@XboR3$7i{E%cqCV_89q{z{x2O9c&qunCf&|z zY~DOejO-9)WlK}rLp{CrT)kj{4C9$>BctA-gf}Thl;4?VlifAEAP2qK9o#vID8eM# zVih<`txb0}nqm|dTfy{J603i+V30;Gk>+`upkD&{u9)A)t25~M<5M@fsboffvWMex zM`iIAxu`%GHI?q<hp-g_W?CW=x<D)SwR*}1PAg@Wc2LdazV2850trDp^$QJ;CammQ zH8^Szf?D6Ci~>G`k=EoIQEh$O*i7tox@dXrq`|#lyDw1pC%#rA$bEpYqGv+}+UiwS zWVc!yB=3dwdx&JIx-(I^JYu><NH*5y#X%)Y7J74UU2%;79xni25gpxDHmm`pg|z!n zb-)k^NnpIsCBiA-pu4BLRmksX=l#w&H65}rOl|i=wj!XFfqMjO$kMc}#Klvmuv0?2 zIoHFe@0`-+wR|d;7JRe!&TxaMqOya&uAGoNPj4q}=*Wdj;97cp5|)~auge#iT}aA? z5ZbmYm&<#JJpg~BugGB@hOmx9DUUIMi7>9a1H^p%N82y#sE$jKgPMaK1M7Vd5r~4? z#dT8=o^Fsy`<dqy*8zz0uXNMd0DdZgXQ>eD3m>pEqX-ZYfmtAaFs{6qG7S1d?8rDB zEM6|nQlvuy<7CwtSVSNTzxjC8W^SjrzcKJ4fZK3XdJZ#S*RMEBIdVMtp>6Zn4{0%^ z#zp5ZJE@NYlQOzv1IKWhQ*hq?uvrk!X*Gei%Ot!c-S6?+_q-xEXw?z|^V;c6SOlg( zV=lvFR(9cfe;IaB=jWs)=lJA#TVx1jN-<(7DiFAcYMf8OYioOIt$eekq(oe=Jr#7& z{QE(no0deFhpP22qpKT>?(1p)P|hS|I@E!gQmL3bQvY052fC(`RP;8w&cpL~olI#V zZ3rlc)Ka>M9D`ILU6Z2Hw7>_wJ86GxPo-n>U~kh(^V$}L0M<<`*Up4PWp_2(un@N( zqqLOORx#+#S}5)NQZMH_YxmPUGysmcH?h9?%IT{$#D}+{?&!N@!*?@)B3nX>zDTX4 z-bM^}pDd9d9pcK((zcDs$B<EzincRC=oy%uOHMrRN?<Dv<6({S7#Ut8iDNeJ&~hAI z)G(#o#0Xfgq$F%bz1p?-F;`HIJ?5DRzXbQ=rMNE2F3(PeHBA%2k^Z-3R*V`%ABW6c zWhdGB9uC|%qN~7FfpuVsiEF4LuS~e<0oEFGd|PFM-OA+(djrMhIs}c^3@l=uuMZ8_ zY`d@?1=%Q!@sq(MI-UsA`HaD#em3X^UwzG1Ls7HixXI7UItv^?+kc*5vEjodlu%8t zn-JBH71@-E7=>LHS1$2*-A^OM<N5uZjfTrCN-DA<6RqN-R*r9jz0h?guhw<>t(bzL zTnHmwqjeI+jvYLJ{S>C*#_;kYA({lX_P}fZhW9jH2dD7D8Xi2|GI+?O$71@wh7LDX zyB}L{#7*N={{)+16PZvD%w9llVr5&oJm^c6R<s&l46r49+tkHmc>k#bzKIc^^Pg$n zeV(D|*9kmLi^`8T23<l4<%1)OLw%?gm3_J>cW<McL!wAHA$#1s2|f9wFFNw{dRpc4 zcURY%=j09j1AETLg}Lbs@fO$ywN_$(2tcsUMpk=loLg1Qk0nZf&Z2l)`Jy94P!L#W z4obW8&(OgRg=GaFDXOzvlj8X^8XX%ljESBWXLdraq}3WBA&|VXxvV^Q#CjZUy=Xl} z_{9`>9#CK5UxO-#;VMGUl}bRMAwyB?vKhZU&Yzf8E=#%xMx+!C++_Y>4tTYm?8Ysc zMz3z&1DV$-YBmeTxcXeWUL@_qwURMJ1@0Xt(unPi%l<x-=}NI>Y?}ykZ}{^}>jQ*m zIBYQj=vxFTvYB9?JwH^4vN5{qZa88D6}I*a(Tf7s><gtwx^hGxf(0JAl_;8Yo)3D- z0_nRjGey!wn!Ms08T+bGsZ2n|L)-^Pl2<o|2arW<P-5G3ve8<-&pGKcqfEzs@`M?h zri^nB{^>mjfCHO*EHxqCs;5i4d5uREk0F#vRPFt{yX~e}gPvEUQ0zLxTpqsqie#kk zuxh9BIF^)!$hJuKW`p<Me-yH<BjV{i>UO3)_W}PhM#ia}4agfR_QAeH^p$%6k*M-) zc;!JpLBZeDZ8C!>bT$48g<yCHeiW@Ws-U=&1YV;b!uds1^cs5-R39^2;RR>g_*<xD zFB3=Tbm0G#3;Y=%EKa;rRHq%Z@-P&pu{@%d5c#Ogh(>Eg(jFqoz=E9@7JB0)OAOVm z3is$8RaW;*vi;Bw-~yYSE4z54R)tg}LT+G^)%s@elrY)S&|O<u2q&m>z|&Si`N<Xo zF=5(_a9s@zLoCN(wCr;Ns%fNL^XI5GW@mJe`G{i^a61KpI;!9#6bNVMv(`>l_&_y| zFWL4}x)Gf*ZxOxr#H5@)=JbyDVC^s9X`kv7=8J~bX{}o53Nn%8qfcBXsW?v<W;e%q z`Eftj^nFt0WY>%H!I&a7yjh2Y%zG}MmlPx1aI&~mwbkhifr^Pt0`;ybv5sPuEGrla zKuSG61f)XzY^9SM*^O-i8lTp!rtIZ3E)XdN+R(eWH6_ApsPQu6nOas5=}Kw`E~*tM zlE!bDnQqV+&n8*Ue^y1oos-3}F9zsY^Cm2ZVp=E)#(Q@Xme1w+K`PiqHWJR4d9*v{ z!#mT4r+HzktX5!S4X!^2^F!T9r<CGzI-EQgcnV`{oAQ9c0e@FFy{Z+&rAX8XD|XTI z(}ciNf)p7GZT2DmtHD%NAzez11)bZ-Z%jw+g@4*RHb@w;BZvts60!sTU>&{`(%0o5 zFLWLIP3{H;y_;UN7Ikw?iA5P${2u@QwZw$$d%cCvwbp%(&QN3zL(-2yh5j}-XU`q! zx-#>}fjL=)C|~E$fF@u#dNqQa><9N-bLj_JUT_-pfD)92sPl9UNBf*el`_BwgDGzR zJbhdduhqr5qw;G%iD=-oUU%|OP1_x<M`uP=E7|5nY*>GTws6SJwS!%0K-fV?rp;R> z-(z1x4SUMaO^nbxO)}|lL(79Q!56}@OUV61>^^?Ih;$3Wq1E@O$GZOcd?;Rnps{^s zGKdc8^9ZCX!}L6T1zgi!xp2(}*?1N2w4BDzLh3BVsc`<*iYm+3ai40qURc5OY9$e# z{`36iH0A)}-EMZ|mh8bYe~9wYrW$Z4XjycE#q5wc(^icJ8Xb7yVSoKDy8pc~BOtuy z4}KuWPD;mOTB8Yqgv-Y7)uu+ry%oqLEKe_ZZF)i*bUtlEloq02BJQDSt{Jr3eIE&b zXmE>1vkD~V=`qDgF<f!Tm_R<K2KIFDE`Jyf*laVWIggDrc$zb6jf+G@WoZ)9S;xxw z&*Cr3szu*%Vu?Agq|OE79l!7^$@>M_H22+?>Xc0-!U*hQnCoEoFD?1%OI=(E2N`?6 zonw_|4z8}AJlZc$>ifH8;10u+#{1HugIRoq@|YJ*qSkq;vM>-43b{AFIN)C_9fb{3 z9sIzvq?)p~wgP&lqqbk752sW|GEUTW^G0zL-_5)Lk<p3pC`_pyFK?ztyTqdj$cdPI z!TGtMAO`FWcjg#U2*o;|uBv$94?ni4`3slUqQ(G0x2%_Hel4>*agv19-@Tl`^sM?N zMGd+kTS}Oi4v1u!VCG=zT}<@-OmY&W`9V?Vq#~LH%~=YMKR^5mb?mI?)qR#{;fq;< zb7V!M0Q^^GyspTo&RoTHF0ph~-35BlX#3ARK;!!s0hj=Z1yfr*K}M+7;yDQg*!R{7 zY4W_<NKdEu0RL{lIMPdhZzrlTiIRgXuefR&S=L{H4ouSl6<)*o0N;FSj33L08w<`) zq|Ep7lD_C6RtJ*w@~R2Vk$}`+P*ME9>mS+`5k+JMswm302Mm7s_QBlvWg0d3Z#zj? z(n&=`izBU5vZGLM7>$hx&TXLkJ2G8z(D`JvM7HM2N%A}V|DK!K$EXcJ_0M77zjHcY zn4Jfh@7W~~7nX4#pEb_t-Fhdax&nz3oa`_LN&`i+=g53XX>+~KRu(_5LyzLG;zFb# z3MuVj>u!&nwR=W}R*m+g&y?I4Px}#2Ohl%FagZ!>XaMhqlF&tMHa`B0Hmw(Df`vti z)e95qq53#cGEul?F)0`2W%dj53a#tNlD7lvaj+&3&AW||i`<V10h4X{bh(+bMHxj> z{ZWUYpirN&Z}ep;-!p=`LM!+fJall2Bu9#e%{M4ivzG^FTJdR71AceyaWI<ddHEyA z2DHnf!&)R#Cq8_yK=N#=reNy8CnnmUmgES`)xd*lWU{s&GIOINhY&s;0oO$vAbfzN zB}FC?Wm(55m3PEf|Ly4Sql47bi_6xoDr)|ZxINk$5tck+Nh$lmNoAv3-F-2Ug?F4t zAY)*jK@J;&ssIP0j%+p20VvZ-FZlZDa(ZKQITXbbbmmdW`XL2nbJk}r27ua+m);?< zY-Xn;afQ?(?_waTr{#~!uwqZJV-#Wa+@4h!YUUHOr@48SL12YW3(#aVvS_f(AEAes z7$K#gK5F|}+=#kbxyU65f>>!8NwLc2#!|$rl)Pc0WHlNwP+*8{#FxaS2D9G`;=MA; zdlDYl7v;NqFqGDn3F50BJD&-o6z_9z7bLoH$}L5r#gLUdkrHETrgYaQWifh!+pFX7 z-cT?2w$;HyQY3AC*_ivvFJ;FR6=m*}Qq8C7j<Yc#vG;To|M)HG<+H)8EV1c}Xn8Nk zYO>@?9(-WZ)4gyX!A;kbRBA{&-WRf0{Ro{%H?Y%~i$}0&m0pJ7zn^f}MDJN}MUKLy zRtUa^FW+ipP6BR#G=gP>y7qq0E9<BDCwTUJivQd565=>(l#Gi4w*?#X_CMg)fc>w= zN28tp^5pyU0OoV@N@4}BSh<~DPquu(pnXB4R_;bw&-iZ}QbF+lhVJoR;GEOhm-^Ql zulN$s0Pd(WByIB-URQn~68y9@P$4~KrG)T8_~-Tr8RfSd`%8gf=o2*mOSY;+!Eg2C zZ(yJ80%^5U6_({Q5(5BarxBBhjQ9jE4AP|`Sb;{01o5FaVX#W5w2=O1>5kr$e{!zX zZn1?(y;TUgIZ>=S<CK-c)zT{qfe8*vBUJG`t4FO4Sk01wvCG6tS+hqH#;7ETf}ETY zYKM;crNn(<+QE27#*lOxC>{soZ4G-h>+Xw5niESy8@uZJ<Hld`M9EZ50@Z8X4z~QV z@}@NH37bV+ASH*v|97p@!^`zZ;sd?Ro#o!rJ<O_6B3yUjZN#4*yp20GHiMVO0{V(& z2Hs%|^4ac%IidJAZq}{)RPCl+S=|lLpdX5P>m#n%$sL-F4t>;Y9-CSu@Xzc%ZX?XS zD2H-(TB>YT@cvDUW|TEvlu_|HhG}a;pY!Jt=d$NlMY3p9$)BgTv+KQi@ZiWr?vMU0 ztEg9|Qa<BD_9@b7HW><rg%@b1suaGfVw#i@raW;*xy_Oti~_=-U@Qf{>gs#P^J2)S zn*<S4a#RuW1R#>Y+t^*&j*>$O_sY&FrZcWXxQV-+EBX;49cpCK|5?W?_a!7B^f^j3 z)?wIb_JYw0>0AXM{`nJuPp94ML<TZ#lpPtYP*iS;!F~#3>8h&nzYa(kPRnsWcs;Db zDGZ#U1;(^_{llcaS4U22Yh#CPcu;93IRdd^c?iSedmX2fg6py{?V`KSRZ}_NBbuu4 zFnw})bPFyTcjv)^=%uX&MJ-`lSniGPNFs@k0;!*Y@d8y*YBBdlWb(<~#!qHDO}f2` z)+Nf^jp&%>rQs~uISSlBddWmH$I}ErE9fE1Y{UWX>oiC6wK9XiQ7=h|!vY0;{EX+E zVH`g!B~~4iZm!Bbo&ujcO8ny=TzKIM^5i;w2~c2`W~Pv^hJg*l@23z(^%E!9TlxsR zJ>CQ=Rj)+l2M?Z;7<(yC^c+a2H2@p!PU-)nS14(2TxS__Dv<~fFSw}zoN3FyxMpjc ze*SJ18!2gj7n=vA-bDe6b3*%{!0$Q$M;ektH=GPu12num;q@ecJmYC((aezc-Vu+A z;866?NcC9+JsNTCJ>YbJe)O*4%=|aBhdVxGDQJiV4+mwko;}8qQ!QbbAKu?kQjx5k zO;jLg4SJ(E)$%&8)>S<}Z%T)SS~o!VjiT7JJDG3pMQ_BoCe3XzKu4n~36mk-EUcyi z7R#*xVjupqqtDUcdH=fm0l%*+{BVCCI+umyW7;xtJtmkT_c~R$<}X!ErvttmYjMj% z5f@tzsTbM)l1)q~^le?(4{1i_81I^M+ttp?P2+XhFYxk*5#TBm#G!fH4&?jh`vBs5 zqBIa5co57<2Gn}Cf3goN1LXcc0=e?>xyl7WLargo1Q@H~n99j=XCyM^SRGUdy*{=z zhF>)@mY9syR^7CXc`VEZ%wGv}42H(2HzX+yr_pIwhrmQfV&8acja;`p_@uXqsZol5 zfqL?XAgVBu)+h4M$~jyxO5hI+Ya8m&?<kv{Z67BD-rISQI%=B{pQ7P=_axy(3;b03 zbNn`;*rx{k>X$1WIy^hU+`PQEn%5VfMrsJRbMh7aWBwM&rxJ|3tsUKgc{Pf@jGT!) zAFD1y=1U#DkC2<e(f{9ca+dE{`3a=nG1}rG#zep`cAFOL$iGc%q>)*jf@xcPb_q<k zSB@i*1>&XZ0I}N%TPkt2e(j$_chFjLY1oy&z9Q%4I#mt*i@JKhgLo&}g*c>Cyhq4g zw{&g|q<;+T8&B*o{yb(T1jx$Noyfw<86|F(KLsDF5n=_}-`{7?s+*f~eoVw^38gKx z&l!fnhC0v6BTO=#P<N!T)iWNh->G=N@37{#y2I1Zq6ff$xr$nz%}}YPl?T7ZR+3kv zwPoR5C(V~}6nE5^Mq!GIFNDZ`);JmVzSEW;(y{?}3#32|lb~bvu2sIddLjwmFv7+f z3my6<EJZhg&R$1r#p1*5iRQpcLP?u*3q2E;rpKBOlG2)Main329^<T&`mrHxofMt< zo6~tNMk?rIBV$;So;oesy}SYrzFrdL&AvFNHGPIUOQVUyd53^=L32Zd`<ymA9@v#j z1*x=UCbxk4tN-OPZyuCC@Q)e<lpL#!=KrsS^{=6*rqG);BGww2iW4{MeYv@&7WFT1 z(hQ(E2tZ?*oP`98%Mn|tJbXXUOA7%O3dp#e7)?!rK^xKVW0@g$Zw^4lD5o1}eSz~| zQU~Y~SMKv>HgeeK)$B@#R~knNV2f{&sF^@JRM{>kV@Q_$_@lI@?7#<tPH>REhza{x z&jmuSD19Tgf<}f`l>5x8amB#bEP2UfiHeVy@F&zz!rWrkz?MC?Pf`o=oBb?QK=GJ0 z*5VI`lAcc&TAIDcD(57I*o>xUy5{7}m(5xbv_=kGz{s>2G_-oHx1IhjoR;(<nrd;g z<^*aK@lURWG`L7mu=6evJbk;I=BKUT3BQ|UywR5vi2N#y4f(XnCcNOa@SoJ;#w|rK z=kd$d+@HrU7=u3YwI%XWK|646Jezc4*j;)?x4qp=1H+|GW7C!Uc}}&>4w$^B@Nr5l z)1#%DZ*TXw!Y2O(bw(_#ku0SK-C<{(pn4eTgTW)^{V4%u%+pNt4cDvte%*S2ZU#bk z{G%DY^F%gsvn*Wr=kgjK(OTkIy&uZ+eG5>IKl{uLNXYzcHfvCz<~tP(_&2sWLU3~u z6c?Zbokdk}<4sxg>oTon{}*<?0BK^)!KtGC&jL=|%twi{RQutQ1g6J12s|de3N2zw z*rIfGW0&r53ipUgSy&KEgqAsw*0`VJprMW-lt3~QDuVr&5JN#c$Hi)NYleGZ;MPmy z9F9);g~X|(ZtIL)C1U6!%eKpV3)K+JsMV!rRH3Gc-edJNg0Gq~{VV(<J`8-3!{Z-# zoBA-3_Nw}#&P7wzEZMuBMeEbP=0=fX3j!bpPf%bv5iu9(hJ_>g-wr=t5eDDb-Y!{o zD<w(u=+Sc|@~Po4IZs+H!3?_}pCEgm_9P3CSsoL2oNl=o&q!mze|w*?a2)vfAyz4Z zK<Dh4p1Suu{v`OZ%R_SxiXTy<&Qum}bRlEn2_J>LeEm@)4MRU$Z-?6p|76=K?<>Qp z#)G2T%H&ElO)P(3m!Mbyh%{?X1WUOElXj*_D#E#RJ??1@)JkILlGwmpQDlM@a(bn8 z1Sog<+C!3z=vH>(1~TIr1GeIQeJd1;kxPTwC5gXSZ_hm>;0km68B35C@0Ms`tr)7v z<=>=-4bQI5^7kV=QSW7MJgvCql%}~7cN4Ozrl5_ctX3tp9BkMlrmG`oT{fXf%V|1T zsuwPb>0LBxWwk={6NMWa#<P_hv&eq_f{NO6e>PEugL*m1JUHbSOG{GmYdNZ_kg4T; zBsI;6=KUED%?YdmJ1DoWS2M2-Iawm{pzn5QeM>YiTP*NV4>4UH({{oI2J#H5aC*7Z zz=@gzvQH%!md2s?s$H5L3;;Ieq{#Y36jazp^q^B~&KPKw#gfUERRB;yLI6XwaU&*e zZNp$m_6AC(@D1U@6?|$x%n8(pm18BFi74)rL&}X}?Lqh;;%nA)eh}!mM{73zPQkVL zUHNvc%9o7;iwwcdeFEp_UUoUjGS4ueR{cx8E5%}xnkq_b`f1d|MD=J&qyX+IV0{15 z-FJBIf5lm>SH=RS1U0#aZXYo;D2_Bq82w?LrTv)F<F{~I7#h^mgG!SCPH(v`2u7M@ zMnFMcpg53}vr(N`xVD@GJB#jYf(wTYdBkH+OKd?;x1QyFbWwG8x$WO)MLvZVYZYfG z<o_xSQ!8QXqdj-T`JK^uT||!NCv?()tN$<x!+cMJpyzf92HF74T>0ed+kqg4*K+^r zSx4u;OshVVu^C4Q;Kv9NwE8x|V^LLm7*;87VjHwlf(4~7T0m6IP(9=xmz`+6h6&ta zYay>&o+L{SG_BH7@z`_*8gsFU?m{pd!anyqCjNaKs&MpZhgi%3lutKNNsLuBM#nCt zFq~3>ry~g!ddYExIU^38IJ)s_H@mbP3Kk5lx;zl+JueUQ5QY6@_Q3;-|M{0k_$Y)4 zZ&9B%5uoBoK6gAUYP9k3g6_JnKl-`rr6Rh?PT>XCPinhbvMVc|8j~bVV)gFZbTQnu zZq!yYw5g3E+7S7T`v-P*-)hzdoJ7a-o_<I#DIG2m${pXt+>8HM;3X)cwQ@(1E*+?D z?Zq>ltsep?LM4{woF%G1fUGBBcTleE!3{t1zP3`myU30CE^X|Wn<Czqck)E!b=jQZ zL29EoE(t`cn`>IpPKIGyt~!s4;$XDgY=bE{pmKl*#pxo@Bh?8BCRCSFFa71>F&+`Z z^u$nt{?nrnPqp?0_cM0e4AaE$_~9F`RHzItJG$esWWG*keoMaeam05ZTfT2F;rt%% z=4(L=afC^77v#pC5+4W0$t=BI^71t=k|`bMZNhnnB<FxMYqH%%aXIrymtj?Mx_|m8 zhD2H58z1b!bW1oCFP0cVT&&EBp^yJ7@bBE(HJRiKQ(Y`Ve5wr&I8#nagD#dCBp}#J zf8p3&2Ey{yJOh*G#ctg-VHa1n-O(^VmYu#m%V+EbK-oFgM`CxN1Q>qyV6MmvQ&?gY zWU3j>Xuim$4|7J(0KM;sTuZFK>9Fp}0!zwT+Jh4#E|zZ!)@O~y;iqTZ>i+abEO#Qo zmX9HRx7E%<l(|;kWNDc!N}OfEw{c^Csu}uBBU^gR>;up;lBl|4iDDRAIbBw(=9uKY zvLBoOOF05(hJ+ezJ2D|!w8c_<k079Th!htiACggsVa$)7#U^$xwTLwE`_U!k<i${z zycHd-wJOulfUk>?CJ!5YKX`l^y)pV+BpGpqL9ZR^reD-O+!*Axvt0LY66KYK0PILv zu3nc6P}<S{h*db#Q{xcByXXZ@Tgks^#Q#?iO3wOEt9tOEdA`Thc`&u=0-VM>aBYz_ zi_b#;Hs-4Hkc#(`v<7`|JNVnN@UBB%Ez!Tak;HrK>N74D3Yd4Tsb@z#4-wD4eu2R) z*N~gUl>HuLiV8b1Py(u*rlILD1m#$Whr8`U7Qqx%sB(PSy5KsFKgC$ERYHhl0z&5k zdEtMzO_)YjQ8GcR#PTj9a962d{?)tl%9x+pq#4y`yD+ZVf4KHlDNYM>8TOz=NPQrd z=)$Q}G0-tK#SGQM5I0Nn)^HjHYYEwKI`mq{#!TG+*<#Gk^G1&BH><wulLIl3rw7b2 zah)nYVVd2SjDx*^WwuJ-R!~(aH&1{{{J<}oUw$N*8E}W(>kMVWBPv@!dye19sO+J@ zy$Pv)51yuB8s|*>hKY5h?KXX47p7eLT^yKbh&IzV`cqBUyVfT5*=mU#fb>Z5+@oP8 z(-~nty%aMGf<kV#AxO$+U8}gA0E2BQX~;|!k0{fEYUYD<1Y0v}tp94!Lu^kD*OZI< zV2^vIwq)G=Eg<MG521+>#sTH`kPfM5J2R-s)DZq56Mg#YG+({JHN>9h`L_v$+nTR? zgl0p|!+-|+6IH>1JplSxPUCxAs`Q>~Z)$uXYIIiXU{O(J$C*XlqX-tg*B9J5EybMw zmPsE92H$dY7j}1gYo=O!+@@sU{C?s;b=BgHDn-f<Z*wa9X_%?<n%a$%E0kN##qT{q z-L#X1_<ttp@kG(Mmj@{hno_%FiS+4MNBPwdjfp9`#sD9sz3u1Vc&C&l{t~H5Fn(XO zpZ`$Equ39$9x-58vAnYq4G?pkq<|l8s*t>*5np1z(42G8dRZ3Ax95^?1WG4>;ym%i zt(=>#Lv>`LIoB~U^RP$Ral5RU64n{nsr~}q)dy4K6*3-gUJB67Owk`<L0-G86X2mP z8rj!<H>Por4*PLvLGD7uqkG7P)S~29zJL|!k3aAZy$`2dInAEsu&SJ=1C7cpNe)pV z@XL0p8MGyR%8~i&ZnUf-1^<N&8M<;YWvZ7jK=9b<OY<t<3#O%t;EpITr8~oF<pt`j zbrS)kTIdWgflJqG;a(}Wh?VU}g&hy=^=7T2y6f}%b?c&<4v|#4Cz6;;2!1xX!{*u3 z{+pQkVjO~i+9irr;7iY(9!HKOmk12zcb<56rD|I>-{X3M-@9fxm5y0GDU%@5`Wv~% zD!M>)`*FJaWOc9L%z?zDT7_jOL7f7X%*mWm9bKebc0PTO74Uo%LMP(t${C+-g8#$u z2&_$aZEw@T^b+H!KtZ4kBD)|2-qK7`dReV1i!f+Mwzq27EpIvEUG<`3exc%keoh6@ zdMpzHrd*%dma_ZL^4%%uJ+MIenqUF{VQI1|rtak4Eq$Bxp*pxcAxknd0rR56d`Rdw z#h3aR?Arcw`ejxCc0`oe12nt1T?@8R!p4>UH$zXHs85f^done(z7HYbt*I%^Q;{hG zjB8I&<!v|9FJ5c1>7*z6>tMfG{FrL3^XH=~ELd4wv&@*L)gA;Ak2u;|C#hpp*bC92 z>pUL0vQoc91MG;LAD_Hb`>P?RRf)ZtZQya7nfMG@3SyXQu~qTGL4!tc4FT+Cj4C1@ z&|@FNpB0t5e-1v19y7dQID1jH)r((Rr9$a~)ed3MT@~g^q)gUjEP7j?F1^YDF3*<| zH8cd0m=K2_CyIp1UijD%mC0WJ3&B=8gJ4jOKg1#wQ^;0g%jaSOC~RNs8JZlQxbo=S zV`9xT|L$at+BzloiG9X(Fe<Tu!^&FGG-8mHp{^xm`2Me`P3k?0OHAVHTEL*`wyKu7 z({buLx#c2X5Qy_(CJXly8<;3`@(V8@HT<06$Feu6u`JHHO1eLMz!hkami>9~dq)WR zS17%y1@6gXBF2mtQRamTsNL5@AK|VTM3-!qaA7noA6HG<vc9m>aA25#7yKKChdWhB zw(8{cDyLm|(y}Nn$Yz^K5twlsPMyXS^3^e4T3`jlyWeB)du%>G63%6t&ff{tEaAbD zDA{2)iN}LNn;=q7BOFuZuHDzr(INJXWep!0+8!Hk^jC-lKOfleNM6x~tH`c)8Zo#f z(VCL|A&k>9ge5&-ri_bk<?|EP**W=+l$#<jg5VvH(QZSH+^2U@4tHs^+XxK_=AS9h z9dP4tS~$$9iU?r)J=hU|6Sm1X3#YKL=Qn_IZ~yZW<{xMy?3AcE@~>LxgV*lz$<YX3 z;FQ12tR`oN_X`my*GM?feC~c{I_KhE`tz*=+}chlkhhyJ(7Q4K!I#@lw|*6rUYnCa zQ<0x$V)4cj2})^A8F<<&9?!)Ov;p<a6va3zJ<`xmX>yDFKHl$+7@E^R+1?TUOr@aL z=O>fS1Q1%N$P4V<;(V<N)FPOYP8a}bSg<sLNG(f*HdwA12bLa0ZbsVEVTg~7JaseE zBcC1#DJ@^?1~#xQLK3P7n>VW+oSu8V=U|Wubs&v+P7A4%6fD4_{mrBH#w%fp@!11Q zc+&HLM>@GgG|<AAhEfXr1k;zU2EYu5=T@$4RQ-{g&5wENfVXjEeKKIdk*eIzXxra9 z>i)bx&A4U5Ks4BtleW?WMGk%grAEs!`wP^I^P?Ha7vaK5&HB5=>YEv`i+AV35B!@C z#Z;w|=24HyFFguyM!wct0KyXT_S44$WF(daRLjr*EYWvmo$;$Lh(#8($QYxtFX8z! z`o2iRY(I1+3T&wUBOU02c@i`h0gyH|(pTFxW%enTwVj5yyhVz+Ly<SYN0=*f%D%OE zXN+#BT0fLub1Z=G{j2v!l5MhHSAFXgN>6!cwOD<_lz3&6QmXdzr0(a%l!5B-nXA<& z{!daQ4nhlm-;QFMQ`iXexgR7|ZiQfP+7QkUjSiNV0|lLjgJ3uDhN;zA@gg+AmM7nx zHtnK;Vf53yY!vMG1=-aUAD;3Px?`qqi1njY4$AA4C^;h$&d;*;o7qjk{UcY?hZ!$? zaxoo{L#2^k@$5w(Q^MK!_7+2C4c(1yQmv=RcJ#sd@!sjAH&sha2*O%utfY{|3XZlr zABHpqvNxFgO<uDxw{#zy_W9Tfq;xc&S$v&_>>ntiwO95Y{=l*8R*Ly=vadz_fK1%~ z!a1F7B~;^aPR6xiq+K?*Tt{Z65Pu4aSN+LX{=Mapt)!(%L__p*3{~0%#c@dWAp$+j zI-7N)5_s^N4dq{bWhmv{Hd9lkW_~?og|gAtUigs|1NHNgwgV<aHe~glJhF`JM#@0y zg@8ok*((;@#sx*^Y>{fZ&mKYQe_Uv6WYiX2j~Djhqzr1<K5K`<1O{@`ad0r$LSAQy zvnAKFp5EGvN0c#Wj)$PrkweE>DRd|V8OGn19tGj?&J3VE6*%&V04Hb2);$n538UWm z=nO<(@t*w`Y(?9FEr95!=;!DH)u-|mnxDb3wi#;}<gX}cnd17hQV5B$%v+axxIRb7 zBgfT8F$qC1U4M$NT;jqwlr|xV29;X5=!}Aq*V{Ggzxxrx3u-ixUZ?Mn{XBh@l$_v# z%IFi5CKqn8rSyT+=F%#m%oacx@^!8>`A|mZL7-88AvgmVa>5o<kzqteQ21x-z=?sU zSPbp4922k&Dm5*zK0n}}iv7pz&Qk`5P{?+MlCjWs>N=fyXs`eQ|Hm;y#2>BmMnYG! z*>90mG(ES|^{n0iFx1k8v<cw-M6rE6g-P>~Rhma?lb`Am;v+_iE2@ac$!4~ra7Y_O z1B?9~n)NG1Y`FE4H~+GA883THSft4*T0$cSLk{5z$LGkYUKNn5aEK8_-+6JX%O4>P zRDlwwte(LhG6V@xL7|n~XI!zKj^jvmwzHK9N6+Uury*daoTDqhLJYPR6oGXxr}(h@ zr<fe2yg40yJ%nQj6WbNI?KyI>xQqv#XCC<F8uwOYfl<4gqQoLDHtZ&LS5CF@0>ZIU za#=0xDIK1FCDCyUVSGF*>*Mx#rJC7Du%_zS0TS8ec!ii~tMjYL@>z)2!{kiN(QvYf zfV8e(I0YQWaSuO=zg@5><7L$=<&jnr8>%T7KkC~V*g2av>p4@cjKTz~Nq;N?Z&kUw zly+`GeicY>g12+NLxyxGGjT9K1$I@7j6~1>0Efnk`~7%HW!e9(_W+4+W~2W#PR3Qz zxPYenq}gFZfy?GDoOi%^k%?o=h72s7{4t(M?d`z-YO#VLhiB;cCcxTGvx#`Anx3uH z*f=Z>ICch@Jn%0+kWY?nEFyNqjHk+<5&$%=cFU#WF!zTsBCD=}j=}II?D;ucL_J=o z0bEcrVJ!3=q9g$+^sIxvcv*3N6c|h=@!dXvN0IU6J{1P%3|qT%IxV>d^>`n&)Sa|U zt0Gw6d6;|1nPAX|kAYbk{&htzsV{O1{5km|;>gvbTP~Xh7C*L6Ivsy(sifO={b)*( zcC6M78EZ;ci1^=5=zLp4t3lm2XHf9X-b??QC4zlgDE1_T*-|<>v!(A7QP(H%?;{?2 z;p9*6786mAAH7S~5p8!W1|j7BBVbX@us+&#+a88ptL9~)gj|e@`K>C4#%nSNo~vsr z(dX<oC>}xHN>ba$5nCyX2}`YGra#>#U}E6eY&mp-3U7{5!6TrQ(XWAnxW=9nS8U`A z1{`LCH0z2lnn}41%vSy<;{0~-`n$!yDi{-2yW(!jYI>ib)@DeTMJltA)6^Z<b*8*m zNd~7UReDAioXU~Qmm}D-cN-k%TXD$`WWW;(ze+i}e@CtT%zd<&%@}ti_P7{6ET8r3 z17s+S!&jm!oDyG<>g2h9GCV&=(F8FaonU2?&Hewa@&b7v`jKv8%FXX*Z2yz5&5Fgu zFhvP*U*p7$b+e94`vbLGE>IF-R(XonNfdj+KI@rUT4zBgNnh0eB;Hl_pM^S%1S5^- zNYV|)TpFnAE=~TA19tx-V^+G`^ISf1HTHfS)VFW#-L3&!btaQ2R`5o>DOTeBAyjNA z>j=azm8*D4TnjaPZNg#B5Ol@_kGx<((M9B56a27>rY_5t5JQ5WX_cbnyeKAs4lAlU zE6yntx4a=^dEX)4sXShT&_RQ=<~H;fg}y)ih1*{EI(%iJvs8CW0UYgx8qK<t6M9AR zKk+<vSECEC1KuWwPTd;af*1v-hi~*>!H9#nbBJOmBwW-#)H*Uob9NS%nnd>KOSexD z$l_Y%WMcTsS#7r=Az>I>3}l+ep<L|Y)XtW{b(QQd%y?q7V!vq|FZ|lm{gmft_9KM@ z>t#bNb!jHgVBobqqq5{0Su5$E#^wlv%XIhhR8kHT??7eheC>*Q^Jsw*!&}bGvUaJ= znEWa~F9ODl&MJy@@CX?B?Au0_a=Fsj`;2)d*qoel@wIlFQxG=QhmXAnU^<NOv?CS5 z4%-ZJS@x-kGLm;5BjGr}BfM=UWu#O*kQ(g`C);bLDpR0Cg=5la;K==SlJ|dgL#S^q z-dSv{1C4*TO``wiwD8<-)yA*^Q9~lv#}G>TabCKXMHpyNO{XMTZT;)Gn81+{XCXau zj$vdUiJ<J~AVrpS<__LTq|2mQV1Qxj3#Tg$LO%R4j#lh=s1{zdI+o)#Uky=R_Ql)+ zqYnP=cFJp$p&G|+-I`~tdmZ-q4&qA$x#GoWG84z7B~f|&HrC)bjT+R=NTL&~D9$`r zqmqnEt3~Ia(kR~SWXP3caDpjMclm>s)VJa53rQc7uUrDg*g#NheHt$cR@qGiuu0z4 z>&c7%JLiQUO==NFH-m(%CvFwtN}s7nw9@^jEEB2lLcq`Bhk%IW3dlp>)Sw859yV>) zyNg<pzuwu8EQS+tpn{VZj<N(HcH4o!&vtuQ{Nz(LmI6n{t^u5SOuiVS{@woH2Tv0{ zIT->7uK6Kb@J+_XL?ZLMHrbT0<-oVwN7fy5#zW^f3+6$#gg2rS(vAHXlMVx%*zv;Q zRekhZyXl>&IoV(Ev&b>HMl+}HNZdjtY~?i;UXHPYLxInX9w5orci<-+W`^F{I{TTk zYA&e$hIRkqqbN__;1o++C;u68c3_P`yLvCET0$O%wte_niFQOP5Q4@B&mY}!7^*`} zKZDHj-3!gGTDrIN^OfCI%CUdXErdGdz#Npn@;+w8iaYh-m#uC7oo|Ss7Jq1Y*>6$) z*s#-x=Ey*JX8t)hK~`f<vS>t;h=X5qgTiW{vsdSX=Wg@mrd!-vyAa9DeCJaeBaugH zebv8(kR9RapGA6AvG3P1Snzp$YGeJD3y93}7*YkEC5nHsb@XigqG)=eOEi=F<m-KK zfO@G)4foxWT3oYrrS!3kz7eqtNFiR`jkfW3Qoh9{6?8t$5bNwj94+nHuPAM5`QSGw zz`6@5*TD}Bq8xz|u$9BIF(52sZ0=&~BVEVOJs4JqX!-G{aw1=l^=UW(hhH<x1kPaa z6#{4RqR$zFQ(d<roB_R*3*F-`+TLTlDnZ{!otGOhcm!-b7{yE3KE$wRI0Oh+SF;KF zuxh{6g#PtU5F2{mVq>GbNOF*;>KpVD^eSow?aETyam?E>{7qs{I@vc}3!hy_S2E*( zPwp9*$k4pFzC_#e`6k<VX?lRNKIwv-5#=u%?a_qrEFb1^E)s4*#p6~u5Bk#_Ui(hl zWhwn1yYJYED+x)r^(R|+b?$N5R>!5zE(+Vp5qa(Z59BJErORv9DCd$WZ@LjB6@2M} zAPAbJe`dYpUs9JLRLK^6%%7isncJmF*}><w`Ua{mnPWBPYn<Zmlgw^boU*!4dM8|p zs_*3b((~7qSH>L-ultn6&o`@7X&Dw<6;Xr1;VZc&061?z)hrjs&=a^Qns$-=Up(jo z!?eH{r9&D~E?sJm=$`JPISB9QVq4c_eM^7AFa@d)^9*I>Mj|8J4eRb|?o#dql9I74 z_ZsVImvWgi6YnP<NL4p^C3}wsHUqRz$<;~|08%;({7s!Vwo+G_SsB_?eEIgj$o0@| zA8Q&0rwvhr&W+8)%z+3xEtvdxelaETqkQ0KkAgjzD~(iBLbhw6gxl!jPt;ce#lci* zb&a1nP(!72{>R$MY28Ak&={B*lI5@oULd*Oi!(gTzw%Wgp$xsYLD3dgyLzQxM=f4S z+Lr;G$Z#z@xYs{0??MatN<KwtMCXLg3a#r{)@`b|GtlChmuHLYv+W)Oh_cOt{q*Sc z1CV6elnh_-tt-Q_a}WrKmP>AX3T7SYQH1E1=7T5BxEb)&W1`$>nK(jRaXy|i$_*;w z!P1L&%K5WIv+@#(>b(dsobic}_nRAf!=sj-n|Jut4b{_xnvqCh8v1Z|{e}}5RlBX+ zYqVrJYKh)y93@h*HbQR{=}m(5lJT(HShEs+`?xPUDENDPJ+a6D7Q`S5YF)xN61&sC zT*(>^QwY!8u||2>ETX{3OPVCN@6h-XXP~|1a>~a<^*BNNa4=eK8zB@-<*{XyJF{*q znl`t4AW|(f*Pt&W;I4jhG(V?m)ts~-))QRvEGX_@?&&I$Nywta3zMFYVDCu5@7v3{ zW8j3Z(S2T-5jac^o?VX`$mp@`Ubj<gC7N<r5a45ac|LZb6x>s;)78^;BbP`#j78&y z9&Tw9*6>h(?z$EYUFYNYwFCGgj*i|(KJG)B4Y_O&1S!q{{W~rOK~2eJw3Wq`m$riE zW*B$q)CiB~t~{a}$RSdB+yU$`lRu2u4{n{DPUrj@6ri}~54gDk$?xY%BCHXyj)`F{ zIErI<*-{FDLqYbb_%)-ztlc)ZxlissuYhumL+a2*1Z$}sWYzoh+4`=;V$1m<$11f3 zvk_DIJxfh<ROZPy!X!e*{=ns_48=a=n-7wYco_}dEGb_hF$zd*_M%^SHgkY`3m~qQ zz2Kqm3G7h!<YD76=)l>KDtj)iDjnnkoI<9kqrv>DGo!9cu~*6n3?)pM$Rc=Hui11z zgW(3Z7jRER0eW#H>$?}gb(zn2S8s|K%trUuU8(cP<5xS7>`o~I7i7sodYYifUrkyu zpE8lgZiY_^%b){EJP$W~uRosw;kyuG5Mikau$vr&yG;YjX@sr9OePUw2{Y?A(xV@V zf+>}qekx8i@0oVVnVL_Lkwz=8OdN#=Ol1CTv>b=__j}`NVT%G|I;E6nCHBk`z0tbg zV*Q%~tZouau(WRrfM^a&S2T_iju~I3l5GYGK?w&Uxsyp$y%<l;ic?I>TQWm4q260J z)T%xg7Qq1^9KJU^lYs%S_4I1%V83larE&uMC0N#OHinV<Vol(s)vJM%l7%KL6X!H) z%g#1H%WOn&DJH9Gfw12VPl8<UQ?bFhq~eGKbd!M_c6x_9SCua?SqyAd&X5F8j8De( zhj)TZk_E>{0vlxGuTKHo^-pdikG6zA8A(n5bdbcUuz70ff#N%=o4Rlb`K9^SMl<DV zSfu>FnKY!4g=Z!1em^Suxo=%+@R(%scpUC@3&{+X3_+GYX=h#VeC=R0glutFeA*^} znDej^x#vqk%j{N@8EB@YPgU;VNVI6km~s<<<Kw)pzL)jF6<XrgxfU%H5}R{m^>ucn zM}Zv9+l`g$7HZoHBI>BVuHP!eBQK@l?J7#FbUftP;DD{DoBX%H&#d<U;0h}+wv7=e zuqiVv4_O1?ITxg5$i6qCW+kUWx$dj>q6Pa{Fp3UaONGXgPObRDT*-m;gejsd=L^OD zlsTkQz*1^t&%0Zta%+TYCI!!bl-tfdn2XCqhLk$DL6i>{%nS@iL@o6ryal(@fmEHj zh<S^gUefE@*cjz`5A&QgkGorIDJjgEyK&VU2Zz@65!TD&U%L6Rq7q3a#x~(GG_+F> z<2)1W1ankX#ePYIQCZr;ERr8JbFsB=;YtZMz$<1x)>(pUs649%|J?bBOCvQDYCCG7 zAU?!Pr6KpI<As~2G^yT=0*Io@m=TuS6}`$hQ6lhPLu|m#Oj2LA^bZ}OrQo)k-ifKN z_(msvJVA!<)@>U(%bC1OjYVtj_`=+j>-510=`~BmQE}e)YP%AK_Aq6JWoJI6ku%qH z+6)YHq7e)!E{+)eFcWXa1_$XR<vhb3OjMhnJ-33aud(OPAGk9>s!Ho-y@m~`ciaN2 z9PgZ%W&UJ017A>{h}&sZJ47_v@$*_aTYq&^n&|$+Br*vzdojJI?Moo$Olqz%bvWJh z3a}8~K=7aT-D;0cP>2hjGQOc(Q9wJ{^MaxFncYB@SFS~JkB?a=c!~#q{#qH(MdV@g z^~x|g;)iV-B+FVOeLtQgo}epYb9P!4CLKi;?#&Url7(K9ie8)BuN=0%?wHGxZzH%s zZxb@@<knxyhvW=-jjY>iNKzW&y|9%2S{ea|3hLql+63x4HT?F3nNAC>0~{B%z>ot% zcx=D;tCFd9pKi!`p?8HUNJ+9SwS_CZsDES97vn51VzSTU=JG;U#gvUL-%*ht<YF;( zC93cBsW#PZ!Kz%$-U&yy4UiM~4J?U7`3*BI02G%0>cXPOtRrxW99o-j*IsTaez_$H zJ2>rb{{n>=*`E3*zx2kF1C|ki^j4+S74LpA4FO<+dM=Mz=0IHMI$b_u==_SJ3)`Q+ zN5)-AZCt74NBmuS3MOv$=M&EyC$=#+Ned+-!ZD8E`c@W&{js?+r4Gm8R*u>*4|ItH zd>USRS7s0_6(i7l0^5fO0yCWz(oz|vuBK?EK8}bR7F>i3WUL5gQ7ufY@3tUEktCF- zCY&4xiv;6fvdpvX0Zp~giEV%A2VS@2;QIV{)TZ`~VfE2dhWsoNs-~q_gD^{&NM`ne zc(=2w!S33}thY0&g|^Lja5}(%(-c~p<R%&5PJ$m?4$_Vv+4)q5K!18H`J^(0aDlu= zow?*9z>0P_vkw2B=7*{6T1o_psizgH0lDK&RUEkb;nzdQT+d0=4ZHBo-TlD$4{2R* zFLCL9JuKV#c^LlxS&J9B;GCriqQfz9`gajFJD}ZOx;LQbY>e*GGJitRzOD$yJnbMt zt&ozKG))2RwBlo1oE4jDh}|#zX*T^Dc!vetTo5C>Mmd>s;+~wd8Mt42!o=FIupjfF z)0X}K9MZc}t2%{a8F&ob7tspEZBxff`fEp(s1{?saPa9d#6KC+5fV_{ju7PF3sW5N zEdCts0T2#S&^dBGBtT?uFJYt%hy(}(@GJ@99Pd@J16>;Fw4vfUmv9Jxhg1=tuJ~J8 zg}F^xbwa}_DJNBQLwA+Jn>h>H*MWC+lEcGaZX!8wg!1VfG67Z#9<Z~Y&cOXCraE`% zr;4A&5BavpJg?*morue{sgGTyBAZkDt0C$tBLU$?P>m*TAt7aG+3a26MWe}-cDx|G z<9gQ$79aQQdN&uAT8m($rEfftF7(?}b+#ibA!rw(Tib|*j9gFdQ$D`2W>p+<TrPfN zaAT0|Z8Ld>HX46;U28R{1^+(C`{9Q00nTd(7sRex+Cg~wfRkU<AHy3L4&7R*XVIV# z*iPFlnDyCk4N3}n-Oq2Yrf_ZCdUYxk2sPz{C<tnVC@*5iD;7HSdVE9qM{@WM%`yp% zSM$5_(oz1|%3!Fsl=QI*<z!DQ0NVc|`@L}iAOrB_{b^OXRA%t;p;5qpmgc`jBz+1w zql1wUn9*nCzyM`!9f;Q_gySe>lC5?Nl=77!Iy{ey7Hgu_uztICNyeWRdjgeMqz{~X z0hW*h{@Y`D@&z1Vtu|xz-{Udd7KzANi4q+5dvs-KG8^%CO<hfv#lbHW4U|uEEq1fL zH-vv8V+YNqP@o2N6W_Y8mJ$eKypEl5Vc`n4hZT`TUS~Lm4a!1?n_DOw-7$Z6jxN4* z4)Ff+tmOB4xa+Njo+$Hk%^_UGPfAbe*X<2)YlA&P@N86djniv*F75Sh)iOr+2kC8b z&Pn>WCp@x=z;8^Pz^v8~^?xp{4_x>Q{)SSQ0GXMAT;IhNlja3xK5b{vlY*@)hHtL! z4lw%7fzs`rRql>)RldfFr~eEOHKEH2XmG1kk)j-6zr(x1=fOFXIZPT--jo3_BSL2b zeQ1<3+&;7f6T4UMjDWN}jX0S74e8-y4=BZwVut03-2kL)Alu%Idyq8TDL`N$pr<}w z@B(?D`w;k)bn|3%T5ePmO(j2ho=vn!wz?s2!_Ze7?06kDVyi#Zn)pTEhnGFn%Y>E= zJvcMRqlB+w0DUF#02fV_*~KRm&)>f;-3rMvS~2L{%$G)UIkbXf5^h{}%ZwS7=&wHE zPHQCV7nW+f#dOXSKiug$(P|h%?K@S418T%<NiHTb@}XN&EM6w?qk3xS+{YPjU_@(7 zmygM}`64@ugViu{`jK2b#$C(H{Oj|WhC4O6wuX#V=9FWjA8ma!y4iMWtyT~c&;Str zVJ55F^vLv*PIb3$eM*VpfpxiUfof|<+@TAeKD;p3-H>?DrbCP<jKYq3mQeDQbEvg9 z?6o1sdrv3p+q+lak06ipZzv{@69xb;TJ^kKpFoy{x@*NxZzKUPzl?N_b5e-3Oe~hM zEr7X!o*oc6xuOs)%qia~!AogVjN{ig>whPj<AsDY(>r{Ak^z7#xhQe#MarJkso*Tn z8bD&rOhM!5bi+TvrQZ#OISYlFqe~Q90EXyYkT+vt=tIlK{!Y!KszrXuYz3N#o)ALi zW8Nv;C5+K|x7oU)>q>gHn+QNSe<uiSRbiQQXWn^}C#c<4GTGE=7jh*w{d3}ap|P28 zea}Oif-KBlMtRmvmGC9i)-`;^>%!GV)&Mm?%D*7F%On0Lq_3J5tQ{<n(L&{1baF@| z;LhvL7&9ZNdq6SHgq*R|^Jur4P!$V}`q)OAfXIey&U$uEdSr56VI+DqU#+BNczMV7 za{mz#=X7Ow5Z82KcP^(G$@S(?rljPy>gB%;1{wY`Ik%3{nX;o>7VPD)gQ@QQK~%xT zWwin>epk}2Ya1{ArrY^Z8FF^3dC%nrL=*KEu2EapL&i7x6wkr`<w6@!*@^^3QvqH& za`z?he@ndOh|G>SLcL0BZKI_$zw5R7W6gwDVrA-`a#A0&quEAF$LK8H2&`5^p~Y~l z2N6=9_<rz!-udoTURgHsRM58nSW8$YtI5|bPyljx57NQ_i6z!49p$4q0gj$^ho`dM z(&I}Lcd~>Xa?avmpvi=?)epKnR9Yh2V+G#-mlC@L!fqR~ZrMDf{<enTwi9)@ALo6M z1{xm<ZaJ#&HE+O|BTv>al$$W$l_rQ7gWS=Y5vUV__>4}-IkW*7W)Obu4y?wsAlaI9 zIV4x^W&O&+a%+Kmz^Fhq*JI~>R4={P!&6fQIBBti)5fQKa^kuYNar$CtHaOS!tJtS zIrwT(v$)_29&zHgpdc=<PYYgbtacuCNHsQvLOR>*Icp7=nRy8(^O4hs2q5@N8EsGu zhCyzS-lwcNe)WIzxd)1DYAGusX{IQ4Soaz$c1Dw1?o|5<6B!?mBMOq$M^jGDi;Q^2 z9LK}Z6GW+83o2)d6Gvq2cl<zT{~s6AXncJs6r3`g`S10=#i{2UpTis*-Jtvn?97Fr z^@MN$0>**({k4LgU7IIRBU7S@i4<(@pKEIGJ?NEA@G86=h<=N@yvQTL{>I<aYDsDI zq9|ET8)VKMVDb>rhh#5Lky5dPx`%u9pw*7YW`)x6XpXHwVp-H3F_bKTv%c|0wx?*G zBNh?1p$M+!41PO@6?%G*AshgNwUN^3v=zm<ZJlSt_)kfpc3<I<P{!xZLeh@1lr3d~ z7~=2y_1+4QqxZAR8IYCKtuyEZoNc%StaHi?%$Z_z(!pFhNcl-Fy+Ui;_Y2lg?CiDw zdJK6MUWgV%)~#DkIuc%hx4ko?b#KaB@AA$T=%fOUW?X((0$ju0K5ah`x%Y&a{Z0LE zen;7?{=h?WEb~cACq_U<MkCHTWhv(c59R(poMZm-?>4u_`(5CHB9WX%AX}oP8jnSz z(BphJ`}^~AE&cM@VO?Klv_hYO1%rM`PIaA#I&jWQn)zQnZi#Uhl5++p?HKo9lhq=F z*nYzCgPNQe?%$cT`}b$EUi7nH&XJLTmVL0@VseYoau?!n-C*;4sv7V6gL_+P$~)*@ zxNO46A%F7>^+9&WYHl&1N=hiM6+cN^UILP}9B9C*cX8y{RciW*&41?7;+uECNE_rD z*^0JqHRE<(^06%X*aSvqssjp|AQBS``)YS1rSiLrz`$FACqWhgOq4)#T_mgV*JTH_ zRr7t9?UYfnv47|tI#NxjUv4Wph|dg+>qCt|#ltbfDyN1vCMBajUaPb*lc`o_l(0YK zAt<o{Qi_b6iTh`yj59U3hzv{(Xrmo4+7DAoO+(PFMK<MB0(Guw6Y{_CZqmOHIl{rR zjBMS8Llg2w9(JPCA*q;qQ3lJq_T^KWZkq1XXrHK*x_?a~M;Id8c2)6ax~{nXMD;cT zgZ-4rrDhJt{|LDwHQKnw@0XNE!8-DvQMfZN&Ur}f2k{xnkkSxSK8-?|R91w>(^OBP zzmQ&IZTOBjzFI7_b?-LEm{=m)v!GaSv4j6a&nj8GZ|kt}PGpr`A~4pefFV()8JCR) z0DM!`Ul%Q1_DM?<6rM{EI`)wCjW6kc_XPYS&TxIp3(V-k17@vtSo94qveu@vHX~Z7 z<}d1q*%i}XQM9_h5%b;UeZnDEHFZ=A$kg?LfBrGDlw`r8g8wKzNP`6#O7I@18w(qL z_QwV)em}a5()jpr6ir=ke)yChmKtI;UB!*PKfAVfeM{GzXRcbshub34a?^J0GMXUg zU@)JyWVD3f<h-<|Y39%t6(}B_j!}-W<sRo-CoQ>YEH1nr9<Hk&)T7l$n360eKkD$w z7}e0C>`JD1b=W9FPpQJq3?gA-_EJ4_cq3cJ4`>CQzu{XncmTJxL<aZPjwBCutBx_W zrjW{i7N-9Aat9P|R4m19N{#l?t+jrtzPN-9TP5hN2yX{e&)7NZe|fR3;kTb-8Ws;~ zlAdnFFe3o;jX3<15t(*@5z>3h-a@bN3nR5xL*E5&nMkcLUJqZW{ty+i2M`PpGW_Qd zz@q_w_>UEJ!YqPCA*REknKj3a?v5zDb)iSatn(P#FWEnYTtarUsZnhE*u^o)xLvZT zOR?UM?+3Bu;u$J}15%C%qo+Y$)Ee01N#<Anmh60o|D_7&dI%x~r+X3KUbU7kGyB8~ zP({yNK_QEtAu*wXxZ@Rx5eA)+hBh+!G2byKyW(lr$o>PB#zj&kMj=CK@}E!+-At@5 zBe=D#vN@r}!8RU&skLgh4~+O1g@p--D4B6K4z+cB+t3~3?n@~~h|SK5eMEI*L<i7A zIj1w4LsMh5bu2CzI%7&k{|&F(%{Wvx&$+|DK#1&?bi)d`uQ8>t$^p-xlDq%q5NBW1 z7yuQ5OF|#o0`-wzqsehI?RY5ayzRrLHIVG!jq?ay%nk)Rl7R+@ip7c;=51P&f@ZJ9 zW(SNhWH&s>C_&@raqdI$t~Q9SvQCFv5?C>p?fGe|m0rzq!=|E#+_6vqRb=q)OWW^7 z3pZqBq@f|v9Ec!6+=D9ToWSKvkqXVdp5E1~T-&RIZ`3t(;R!zimh}?<Y<D4^l;LP1 zvER!pZV*1W>ip6CVT?Z%CEWA1Dnl$QlTFDwd*KzND}bgMQ|>(4Tn21cH;x0MGRH#P zn>Yog@k-F}&Io(V1#u-z3D=rcU4A%NBr8Ung~^S3G6zIk$4F8JlD4y=@G0xlUX3*C z=Vm8R=LR6Lp>KMBg$UD)xWZMv(W#JhaAzyQJdFvZoi!2EWG}Xu?An-?-9Rtv@<<~| zzd3NI`}PqF@G#^zk3ftHD77JC#aP(Y3UEHbbN(81cIIVlF0)Sc`z+Pn2LneN-PF#K zM6H#8-a~E9@svkWZ59r2gyLqU7*w6WuvuGhPP9hAGY3cfl|+dvNRB`E>Q+Lv&Css9 z)1tuZ8GzK<2a3p+*-&Q23eZ%v!@GX9>Fg<sE?+}-C}^NL)Yu1)kvQT4z%5#k_oCr~ z%@-vQZ)VaayK1OA%Q=0N1Ow{?v1&D75booz2fZ<GO$^}2ibgzdK*?Z7WH=W4f1Yt} z)zjOebQmfX+IqG}9e@Zr?;45KjqivC0)+Na9oHqy?)P(us{i0QBIcQmDz;9WA4SE` ziqI_22ScGSDnf0bTmWYopodD;V!+s>=ZFHfg{zt95E#K33056=QsBcE2JqmFnvU+) zo#Z~Jb<%?&7+H)V6l7_`%wX@qB8g3&@ka9V)XnV^XQqBZuiTC_m}ypPnW1@Z`L3Vw zjI7Xvj5i9xfTXsE04H{VE0hkTiwj)4WTjj%WpzAs!g0;Na`wRsr(x4(>Y%vXqyK#c zS!}pD&u-iArSR0I&Qf#@go!5X=u`)mRXaCmNSrvzdCaTML>97{iRe|V0nQcqOPx?{ z1wu5LG`OD7V%zzbu2W6-(2VEJOwYJ0Gi%n*$Z;`Z`?gj*)HsV$xl*6G)yPwB(?YBx z!S0s6RKK)zn$-Yye^rvNDmWL$N4mw*={bH}#iD{Vmvf2;05ujt$Re)ZdO?o1aksV% zVw9Z$@^H7JaAg?ZdIvw~mmWOKg0^^%_xr3s29AOc9+IBaZc4@V>$MmvHljgVaHPth z``4F%k?Hx9h@9c{X-sOailm!wGd~&!r`!GewQT(=a^_)nAdQxu*U|NSpoL~vaNW@m zN_(O4VAmYwkmksG>ks6vWnDHT8h!{1n0~N9>9s!}JLnv7r4He?(9}X__R49H50tDB zLV=*zARw8EtTBr`AHv^KP)fS%O?^wrhVmbr3J)b32%HwC>jx}Oq<h_>t+|}O+qzm& zl2TS3%H1gWNC6-~NbxUO*Ich9wiGoJpS2<?0lI}d5zdZ*--bw4Iy9<Pey%N{l@;KD z!A`kZg6#+H=Flia`#Yy2<mm^`1rUZdr#ck~KkJgs4PYJPP=V-P2^+fh+*=?5B<>X2 zrpq?FwNhT6fYmQ!w+G8c`w+KR&<7QMC}r>y50pyJ)G22GY{;+nbhX4DD_qJwSgxr~ zP$HdgG(1Lcjt}0cx@>V_f90$A*DfAPwpudgkyza(KBU{kSoJC59EoEW<8D^1Y)BPq zFdZ;tOiu=IJil5v8C6Pg*LzJFp5V$IaGs%z35HYSrX2e22>$ez(;}7gUNj{|psrkm z)%gy=qA!NFpE{Gn1l~5v@3>#9<pQgrXH&SbPnog2Wr0C60wjmd<ZF$js_m!h<!Q{R zG!$bT?yW9iR-G|BNaBEu@R%Ys>~GpjTs%In>vy`6b+jW=Eq%JdJ44+zBQ@R?R$Z<q z6FP%x6(ntU=Pu_^3RX~{%1wI20YgKw@eH+}w&a+2bVWWy#V@7$t#b!UZt94{2<!4< z=&jiW<g+PLimLc6D}z^;i&!yKJGk~?w*bI*m^<wVb8!7<r9J!KAuqToq(o6^*h@nL zapR|@ou)j7I3$2P&r4==<DeYe^sOuprw0yPiCR>2*B%u5N&1s6_cqYIbFuYTT6pK` zo4l-^8%40vk$;%_j#CjT0L@&-%V@^_#RtTkYgbuMiPsFn_(u3r`|-oF@-Gni0%4?K zWZ&0B1ivqyllgU~sljx8gZe630P^V@+aDR+haSGI9h_vUHoPP&_@=su7tjxlOodN6 zKdtK~ezx2Ue%af7y!I!2x_EsLARIA-CRLUV@qIoP79A?p(X7vlSm{84aA2fvUJ_Qf z5UrJ92T1qEUy0;?*hJC^ZR)z^UW)VkHBi|lOK@x!_R>NWLGVc-FZe2=gpl{#d9<+r zy^kf7Ua=zdf&H3MfI)USgF8`G3Jhrk7xF%Uk^rywPz1BQVF2!;z;*p`-#az;YHI)$ z-Y6rR+{<64GPcpPN0XGs`32-l<@y9)0)2ylUZxh9U8bn&U@_`*1@^CmWCQT&3xGfQ zKRdDnpe^b&aIYRTYtBAF)=VzV6x|Bb*wVL~6py)F@(f0U(8G*XTno<RgOl3|zTM?} zqx0(8ZAmmM{NxFz>JvIUzrJi541&yYo_9<8tLZF|_p7|H_>IiAV<O?cO|%xZ(dabB z!LQ6FxR&GkZw6U<D}w(*34LGc9T*01u_Bjupt_#t9v1^iP2@-%M4y@sZori}6Pby( zJ@Fi44+P)>;HW9YAXBDb)vWp<Ku#b_P2kzVtdSEbH=Hw^L*p@r0XIHVNPr}pe&&=? z-LeH;0$fy;VSrrGb%lFkezpN2rB#nyIyp^<G2<XfprOIh17}ixc+2T8PFS}run!x> zy);3L2S~FOe>Dw@8R(}h$0w9^_bByK(kAYR4S+<ck(ZR^O1c9Wt+IVxF_pG}KQ`&n zD||>2BPXA1E{+yu1;CA|6P_)YeAGuoRvQy|tOdtG=N<*#M?}O?F=zT;K+|Xyc@TuO zG0~|r?u!1VnpViD>oF9&xp{(*y7(xYv5IsZ=c4%drVP2ytQd2QDrPa)v9n27H#9~u zHRT`XBfG*-GD0__2v7MfPq@x+y5^oS8$j-a<h_E6LT!*QLQrM+a^?`|7>Z!60O#hU zyYe;=uZqRTkEYA$Yf(9*EGY8GVs&`b7JtjVrg+OBw?IlV7k;^>KV_wCSfZpC1I6ks z8<vCz-4G;2gzjNa)%XENU4SY=p=O`Zq2s;}-g7>yxYiIChuRWI6_uWnhUO{6Mg*t8 zyddDDV?p>Gp~gyYdcG~L`q%%Tl^&96<BS|=Q};`+|2<JSA-v-5d6WUOI6OF*;F|aO zUYvHGrk_TO*q4=_8G@~3BK{mN2NZ^}L@}a^XRFV;VTK#qdFiXwGicc-%kKmHDu4_t ztto;UFyvf;qk!iyd_8mFt0Xg<TSJpZK@nXUsJsVt4(u#tmy?PWs2)G3=&$ff+cEgj zF&|MD&!CB7C~`}L+V27=Ad*ewb$tnsR003r0&Y{y<tKb%xtI;rkSp7$@Lb+{S`(HP zivBGA8BpBzCk6RfXwQ~!v-+w(3CfZnS(c%kHD=F1`CnP--;sN`XIlS84^1RUShmA+ z)~g7)(RPgPVs0U}#|*<|2^DS@89AwHO(lU+$d_^-NNCJe>fL;ZJ-XFd>lB}5B1AN~ z#jc^7guaPSgt@5u&{*vI({3N9EY`A)DC8cUNAgNz>QYoid`$L{q>Z}f2l5F4Vu!ZB ziTS=JOtNB`#V9_`(F$@&4oJr7*XpIMO~8@VOP-HL50qwX*=oH`wg7{NZ0c5yg{Ihs z98lYcjHb0)!6~Z{ZM(I;?P|fd%!%lP)c-o<d~XztT!C0io2%tcmZ1^0`O2JbF|Z?8 zeAb_ef)32>=dTwU3NWzG{jPw~4sp?PLYV+FpDCYsacJ@C>`{d`Pf(zb;1~M8HGJ^7 zdhOn6Sdbyn)o+A~wlxgUaIOCiBu}Y@TbcPp7$P#&7Q5S{V`al{NQjUTrWtAz5X~i& zX!};Q*lkFIDA2G)W_JI69hYWZDmjZVZFtHOruYVw?rLpGwPN{SE7iq}-hKg4dCR|f z2}{hM8f2ijh0;eT-coU+M{a=>4p**=OQR-ey)Ie<uAW9TO7mC`&crzQ=2a=#xcb?w z4N#rnsVmf;`?GsDrUf596~{+Gm+fiAlv#EgFH)NN#^pBrp>lUN=Ejj+49cbz;CV=q z>Ogm16A}YQj!S%E7A|`?AoMrvLIf3fA%D(;_?M__1mUtr9%8CwW-hdz+(=5I&{>xu zx&wh-MVYozbvZrET8I@U(z-w)@{ZRK=Wnxsub_f)G;GH~TeEA^-1x4o*ZYHDv<<^A zKd(PTTDN>QV6zEWdRR+TO}X40Z+zt9Mp~MJ?&1s%tO9aNOllg=Ti;w1K8uhQ&oFgq zz2&qgkX{1XRObuDpc#us$stdr1db*%ma}N?%}&}utj?~7bSv>&<ZX@W*^%|W=8lSP z7=13V^B5rsH=-&`+hcSGKP&c5j_a?p*i^$HN3nvwF{(*s4zu$WbJ6w)$?DZIWpa8y zvqrKK{UXkVZZ!_NTL0k{Su1FAUOmilEwv;c%rJ_Lm$t1-Tu8Z$N}RFTej8rEJw>o$ zV0ZAS|9N%tLhHv9;!Z9elJ0;>loyQQb?%Aqb0p6}z_WvvMMzy#Fl8UWz~vo2<3+`G zVmcxv`9efDIpKbXn<(_YxPx+<C}7aB_LqQz_4E8V_-R-i3e~X|bVF&5ZirvoM7~y# zM`%M!zF9cRxj5})`rEZ0D>87+rp6@5Ejug+kv3EeA(QV;(?t7>l21-VrYSlTz_?@| zP}j!#T)n+=Xa_W|2!GdNGk`pi)#cjathpNuBzyZx2{s(kO00c~KfbzVg`hy9%Igw* zcAHOe$kTt-P`{3Xv})o@kh$jZw0l(^NcVu9I6cX)wnx~lhpvXwt3K4jY$rT5>y9MX zIQANBioI;mvJJFqeglJWs)RvD`G9E84g_h3V{xNtXj7~qk`(5I^X0`GNR&;ax%_wd za1MVC;utIfLiK?m^0sI)RqkDYdzc)RyBRae-tF#_x{;=PzQd8u;{*xJ|GHUK0B?kj z-e9YdAH*Hv1}1vQxPhs4@e+=*9X9~~CoaD4M&HMsJ1>cg)#|iXD%uE6*t;C;QMK+N zSY-KX-b7>Qxz_6>_+)U9Klf5J)XYiw(>fKRlmxJ(EtF)je>N~2&A?T|yW|(2oi;W} zL&SBR&XIyT#CE?9O@%$Y_aBnp3%#2InnyxM@GJ0*lS>6PC31zSVLCV^bJ}h?sYiGB zcgK)nJMh?#Wu*ZbP<~yDDh8px6Y&U!nCcXZqcefI)up(1CW#Af^-e7hjZP07#->$H z3ag_l!*;vJC^1RZAnfL6<hFz%^Y>wRSs@k|zWx)VzPbSsPZ>PDkL5zUAFA~^;ZJod z;i<}J)1(5F$DE{MB*<lQrT0dP?aee>@c<lg%|hA0EL5gjAW_J`R(f24pgF%280>+V ztPH^2SP#z8Q*10z44t+*GYtQ!v-NM22pY(qK!H)G5Q5GYktdX(WzmA}<jZLFmj@~; zN4uhL-Q+@hITH5rc`vBQh;%XiRr9~e?h0i+FfQcl+eL&?{$|7SUFG_Y@j^%!kiqJ_ zl{`IQvN%dbO)J@Mh1Jz8zFbcK*$Ocos3KyxwJXTy=9=j2I)Kry?c*CJR|i|}*JP7Z zyeeBQMyWmzP6KDuTJt?m73rs0UNwxg+BK7wEu!=f-?*|;FSl@_WRrsKwE0UB6BFt^ z1aq-eQiX12@=Gs0M{dh59j2HMJRY;HWCpAlDezpVb+-jA>UY{y4Ti~k!gt-d``esM zsP&nQ7^7OIT=bs$f3esb;a?3^0k6zF5k4cpkL4tT)P<bJV^%%h91JJ%P9c$aW@hX^ zTpC0?9i@I3k+Zkrc92bnz+}$8uY|eD4-0VQX`g692pg|g>Od?F6v{r_RkglaJ=PE% z?>{%4Y4HBU^VGL}<CRW?Q2t*|9sIrNq6B7E%W)r&PFoCWR1_!cGwBOx0`yI@&7gr_ z(o4z4e!<tN_2z_+`E3VhRH)E*ggP81Y^0-o1`2^rzWz3!DFX57%{g}(@qmW(UjtGG zAVua(>S=kj5AWOq{DyB0AXKTwuE3<Bk00Kje;Md2;nl*n8GO}-gMfc}f-3uhmI2!I z$T{0@W{nVme1UA(j^)ry$<_DTJ-oL>%{^;;mm-)Qa*=mQ9_^~HXu5Z5gF)Zy2+=_a z86nk^S-XPi+zA1gY7d6Dr2KH6)>3`~h>tZ^oI2AW8ySed(Ms@Nm+t+6ua}Oh-{SgC zi#=$r2hHj$%2QIpeP*uVgR+w^Mpg<ovjje@fJ;@*3T8ulk&%l<c?RQ8NhH59MLZlW zxl&QwKebafO0ZVZKq_OKYC<$f@$6BhY7&yj4zc1|J=@;m`w<4(yX%duUai6UessEO z&&-llH1C|6bksf6Umo&rp<qiAN)tP*w!CWHu^8+oi}>6qD`$O;aWIuXZgpUc>mZly zo#x8wq)64nw=R23_^d=;2r~v4|MVS%YKFwjO9IA2kd_OzI+uVG8NC{J8(c5vW6iz| z+oQMGH(4K8|8jg;?A5(reH=g^^?>ZTGfcuXkaA~mPa8)2h+pT(o4$S^^<9vbh+l$2 zbk@-ulxyAKmii=v{)H_hjdF}j2Pj5DlzqGDZOSl%CbDm`g1zgL3_=i6(KTj{B#1LK zsxTnk(CZ|E@uZ|1L!x-M@At(U?02hrED0+l_(&)&Z*Nx@$X$W7xDTjQOfnu@Z_Baa z=N!8OMUT)4Zvivy=a>YsTwPNRjOmptzP}Y7v(8=#no=08lqz1;C1|G+?WoGC)YIcg z<Q;Rh7ji5~#0EB%!zW6(2fHzR1&-oK#RcFV1#nBPNgGcdGNEOgp_va*(qQP&Uerai z%_}G@0t72zt8*<L!;#){nx&Lp4hqxi$zh~IdH7aHfzd1@yd22woevsE7Lc`j^vx{) zGbI|l7AoW2QUwfxqC3W^h{P5hJEOwO4tf^1p$@=8POVZ?yb*nzr|#K2RWa1`64wz# z>?}{mo#i*^6J8=2jded<C&-?H2Fp$tROoVNwJ1gJ1$r?w2|^@wf1->jTrGx(`Ds)u zFrE75HE^gUCRZC;))d>RPkwB&xjoleZJSO1r9d6|p2Fa7A~U>&#gfXqmIk{_VQLZ$ zder@V)<W(?3omGP$*dNp==UHYX@JzU8vijj&QeWGAaujc-@bWIxbH2wwZc3%+eRpH zlF_8tdbYAupx?1VCQ7+(@ls!B)7_4z__?fNLto<gMs!m_g9%?#ovO(@gi7)SC0yfz zQ54L(?M!1G{p4zdI|Ee$XrL*#SoAz}yHTbF%BP@#ip>`X_~V_1m8_>@R>ukagQU|c z--u@&VARc|^9k4wV`49NA@e++W@pOEbVpIYxj=})$LI8O@cCZoBtM-#LYO3ciX#p# z1DeBZl#N7p$;;3D+hZeZ=geg~MZZD2K(o=(%0Sfl#i}X`>SEi2ZE7R6C-pul%?7|d zdYbnIUzE9CjU)rT|DfoAw7${)Jlu3OQ^I>;n@TA`B7ol~%?!3PF8sb&lZh~u^&>v@ zDYeVHLcHyC@cyeQ`dn%Us@k+84!7I{3LWw>heg6)%)D}~Aw(ZsY33fW7faP|nYB-Q z<K+7uOGwnTFnc~FRu+J>T@4Hv&6JU`8*yI!(akXbKmeMbjNP4BXsin843G9DRaiH3 z)?$+TYc_e2_bj}r^#)$2E~))6JPI*U#l8zACct;@?bdC(1Xd;c;3`7fbp1hZb28tf zM&-6@_Awpm;}4z`%n%|Q3(#>DxH_HEKxyaAeKJPPf?$&oA@o4-NG$8a7<;oO{n=3u z!*N&KB}=P6qsOf&kH5Tc(`9}1IshujHFB}$x3aIVEisp^TTQ<w(aU7bL77c~VX228 z4Y7EL4{F5kE|_M>e(sd!EhrP!#$qH#3A^4aFA*<U&{=8Qi6kTban^X0co`!v<J9zN z_saGWchT*=`oP2Q-Iu6w|Bv^#d{XXZw{RxmS^fY6R9P4oKG6iWo&#v&@8{OhsB7%y zhZF@sNKP$*MXqtBh~t_OeTA2VL4IuY{78cvUjtL!iL<YKBCw;@l1+|Pb;_&GN(T55 zG7V<Kuu295qa3VGfo|bkw&!#B#QUjyn;O4re9O<A=tSIj$^9v<X4M-(N1PU>E%;Fu zG*_HFCq7b_wDXC4q~^Z2$w@X;U1(3Rzen9qhCun}SJV${9J!pzRdlIWIV)TP>iXWQ zlEiKDi|o<|RJB0Zr_zfv%Kb~eRTU03y_x}EVTaTr!k4Wwzzix|f!p}#Gu0aQgLGy} zXR{fBG$``Uj!)D?GF)wIHGT^xH1^12wq)O+rvJCHpw0l~E2>_bn78KwG=A>Sh_6&P zFVK{_=7tAi!5-;Z3tN8ylk(kd4Q|_6sPyh<$Cx6|(T4sXq1{3xEk@LW{-{wtf7}un z9(@5~Aq+5uv+yS>R7>+d0{jW_B$O&lKxAzEPx+aDy9@>H4H!R#%aehXj(A-PQlX$q z+!!Guw4&l_Q9#m#uVdKtHRA4K{lm#9ROxMq=gXP5i4iKt!FobSe_xLGu^Ojl;I57I z@A&n{k?Gt+h_^AGbUqLVOey-6eN~PkXgc0WmD7_|^zB`cjpwZ&yQY{6f{-sp3u0rF zO*!T6Cn2y)iVj5Pmdd$a5lg3sF=1ZtgDbcXORz3h7*tiy#7AvKM9v#pX0RQQIxNRQ z_J2AZW1<cE4EG=X56&;}dX{4tI&M50SI|QVFzko3%z07wv_+cP%~e~ftflpdSmBmD zKu=RlDZ$9=`f+H-$Qw{P>QEGPq*OS%C&8KEfgmmE1=O*c<jT8IsR(_ZCOdybv+;3J z$w@)hFL_EPaPoOd@*d%&S82={i6^Ou8c+C|9}AbHIM$Rme&_W$c9W>PPqXRhXt8I> zc4-h1R0mZ-9GzjXJfgGVn3KWvwGrtEe)N$6SNA!NPwM{@r{8xO2l>hnVOXCHcEDe4 zp<8}=Vc*bM!Hqv@;#4yE!6?+!Bf147-F8iey3OUMra3rYLNYdMJe0b+H?T2#^bkgQ zFdF>ILG%mN6LXzVTt4e@56dLYKx6a;BEbFVF<7wy(MsRjtN}k-qI`w(hF*vhKFCw; z@0i|1Knu8mAgx7~zbTBub_QmE9S(`J7rx+`Q&2icKkMlDim^hR#j$tZE$SVjda#oZ z`>h!?1T0<$gipyMv*5B4gAwAtx15y;jp~k4Y_S=lXlo|NsG>zx3Q<j82t3N(joH!B zrLr2PAA$MIpFasvW1k=7YkE*CX1DsR{$31CZ!fM2;WEoX5s<D#3JqF|`31&OW{@~& z^XkMzp;cyWgZ4E?J-8JU0}?@)VM3-JaTo&q`~d?h%AId)z9k(KlmKmHg<X?T%4pR8 zXzwtLWysLb6|mwGRIj?2Jos+m36`~;1ckKkdc2@YGHRO^ZU(8Mh;!1^Y&(>pB?!HR z^>KPRN|;QOq-7Er4U30g!n26Y_DD(h)#^()7%SLI>%cXG6Sa5PcYdpr>pC`BN&B%d zH5&vo?8K*h^-iMd0mLKO=}4w6wD~NSAnmifxwVcmcT|R<+nI7QVoO1$Sic~wVSHuC zcl(GL*TS6mTyKrDD->Y6GzsW5*Du={@1F}y8|f%Z-o;)yO6%{xUy1zFb0@TjLJj_u za1@PA6b>^Yeb4{rT1Qi!fr>@zhOZ3}f~^!OM!8|fp->-=DKLHtu(tHbX&xfnKX)wh zBZO?Jd!R153xVI3-b>u&S5$G;cahw*+f&>A_~-Xd$Tj}K4Xiu)J+?h^Y>)w!c+1oh zp+v)Rd?#(x=9y>yUkF|zR;iAKpHV>Xtjz^vaH}pne7a-CdY3_UV$*m;#~e22<`W7V zXMmdW^XCdCP<bzf>T%p{RHopTrjW}Y%703oW?_YhE1#OVh#F?pv$NyZEsiLz!J1|G z;~xF`b1wuk!2oE@zX`Ta6a*p`ykvSMUA%@SH`bFB8TJtSeBrzL3@g-q=uZ^moT1L= z@FK871Do}EW<*NWQPF|FnxD-Zp(#QX^sUBcF3j!{o6AXqh)%vA-6k14G@}?TtOiMK zj%x=1Z>0TkDx)K(?_|xrVd>C|sP;?smK0g`Z4~<14YtUNA5$VN?Zgikc@A?mxlXmJ zJY1`83=?YqmxccVjH8*MR(UAKxlLHy*7reN^Z(~Q1#ON-R2bfWGc%C<Zr2@ds(t%( zm#<i5HNcABe3dnj-VzlP8%8=`V$pNyURMI>hYUP|^*3#;n!Cgq=LhDrLhx7~`ZF+c zm3O~^W+EW{vvoOMKXDkZo+viBij%$Au^SfouY~Agg%X(F-Ye-%Ez?f#fw88Bta~Dd zuH*?$079wqGHQtDVK43pFp{ZhBdOzaE(}h%^Q%X94t^*(t`jpJ^acNvs&El&0Yw;b z8Tt^VnC)|M5Irv)I}d#TD(ZtcZ8`VxfFiOYk2UETwzZg)-A#{9LA!?*@4;d2FC5C= z7lymn;yT-i!-E4Y4hlF3iBs!3XO6rT8yKu>If;{4E;^y(RuFxZr)V7maDjM?6x`{M zHN&_c`~|IY7!kk62+)z+9;sz6`z12f^6I&KWiJ=7REG+)gP+Uzy2$L63?pEEDP3PD zc5?CD4`eMHRpjv`>annkjfeO?3EgIMPGV=k0{FU94NOn8s=j=|NDlouM(K$)DayEu zByjbrf<fFsq{(4|9CtIH9n}Jpd?cvv2Ve>H1oy~3LR*jD2P8)SPA)dY*^2^ma?QiO zp2g1PFKBUH^fk0E*BXxZ4QrC&-IckHG8n<LlG-G=+9*?ugOspl1C*C~EuFIKTpoOm zv9!voTa7E1&@-52J8NM<^j;x_WC9wGGx%BxhNyL3dG}_|G_QUvb852-9PGgkr&^66 z9_!^BDRMJRTpK;_X7(XK@kO{oWxqv`2&scZF7RbWSWZBQ<+h!;D`z_<O|HjhnL2O( zlnP=oA-42Q^W62}e=dvaP<ta_{XrGhvE33E7n!A^k4F-4f6fS)TVW()DMP=q`x&X* zm8P*vh=0iF3N5ngn<uqy1P-SDDc$fY0Zz<sR7>9nuu%8Fd@7u4R0x?2!`8gvGb*@` zm;h)@2fuvf?M=Z)WQ(6&zsc%XTj&AZx^ivkVw@IwEBv{4pc{FoTs`&or?-|%Jk@7$ z^dXhw#dvHl!1mQ)7^?cz?Xg|%`o4PAvylFPh)j>JqQbh|5L{s|O7Va;=qa!8^Z54= z`#jW-M1&`I9eO6s_pafzFM2xEhdIZhkJ4s+cMklH&IugF?<;>zKGhaBjhjJsb=FPX z5$JB_1^PFG5&;HI1E-~0otLeO(d<H}9-L)FXUBSI@cUi&FPH964{FDr!10PDXj|zn zM#42h1e#YqN3<B}5Wi!7%HX@ypdGf;9fP))pV%@w+nPFVIKF;xm>8jt)r^DDtT}18 zqc=V@v`T}UJE80vC|9N6J;x+DGrrg?1-Ut!In^3`5v|Yn9R>^|_!!Vck$XJF%6_;o zy6HDp*Zrk@jWWM0iU<ae!gZ_snyM~V;zVai9*?0L^J7)LeA3DC&-G)DT?AW%Y%p^? zNzP^R0B-I!A~8TW84UR#HNot^WqHiGA(-UhA~%ORi*>jDN>5Y8QiM*hO`vVSnu}$Z zOLk4p*ar*Ijz;Q1^?sgC4O63E$~njziZLzCKM;S;=RG@*Pf&M0qh+;tdENVwQJzma zY77fDQ>a6ELy?>M(avI;D<|+kXYJcAib|~jgY`QFiPl@3H*i)^x=x829EL8lLU?mL zpARdmO9!&Sg}mZ%J9pN)9YAw^>%lXyH5oTCRxf@D-$O|+nZsmUIJ&j_Ws-$GDTiEE zy1SIqsHF6Cr^ScZo}DBCZ5>!hR7`OsD$UEaY+2p?Xm_&1`PGqn;-*5Syz<Y3t{KY$ zNS^5Q$WUkt(qiS!q%#x$=Izvjr|HG@u|O-aQzbBH8N6DB5DvyQ{UTRle(~gk;~yOW zlIODW))x1ED{~AK7xPA-)E*-s*kqX(Zvd%Cu7HsLhZ8^~ng|HYkuDGYGo>9e1{u~e z+k<t+`K3qrzBV6KdIoqaeq8pzi0y#wq)|pe@{DN^xvCuIUq25)50@p^$9B#xLPGUv zGov7Tkm8`9?2o3TWWQ|R3*_sQtnDh};0LIWk~KyxMlPJyeDj4FB%s_nZ-@oz!c*T7 zGJn4F<1d=hGO@5P6P&#LW4@lDp~8d@<%rkO?9pS`Y4ti6RF&M9<2?%(5+{4Z!G>d- zs|Nk?e>2+m<f!X*p%nRr*AL-W^B8h9x9mqsU6L-Hx3~Bc#K$LMG$C}Crg)6nUSO1V z$ijN@vw396;efCl5D^mDnEyRj$BrYDF4IYj!Y}7Jb4V=@s#=3b^&)wfH)F7fq=5Y; z<u$S&A8%chjyniik<g6VAK2QqHs23)d*!|0%eD^6{1>k#v#=og)4u>7mgKa&3D#IF zSr6CpJUhw>$%Wl%9NjTP*!bCGy@cEqrSXh+KhvkZzw6<+<8wKE1+mVE`Q&etL5*j8 zJLUTO=i%A<Kf#LU*ZO(YXt{B1e`T{{WVlJV9P6@e{0!OkOD3jJGat|6d_}V*go)=N z1-0#*axCbO>z_SY!OdU)lh9+TL6D^P<_jx|-vc3K;v1&UzO3R+(jI$=+S!5|wCW!b z%7PzGQQpNUQKsg1+`6lUw}DTFLTsZlGntfqRq*%Ru~?Ss{>mlNK6gb@{E?XR0mF6x zb0nSmgcPIkHpZ2esYs?47*|)Qae?nE21easPBV>t#T+35_a!4JZbtvvkV*cKKCpEF z{=6Sv(krELiA{O5e7e%!-2YEi$eyT#x(zUu-D2{dwZU|Rz7z4WpH3F#i=lj^M)Nhm zv*HizUundTZN5q1G3^ojYszve=a=1bOjXvF+o~O<OafrB`~m`h-A~rCLzTNdV)_Cc zqDlJKTds>xKoV_saiU%pKntQ-8`1)bz6)YT!0Z-MNfY#ULuN+2v2B`PuvRz5GyuXZ zJYj%5mxemR5-9V{G~&EaWDpcif;J1iJa^|nqX)4XFPt+dUJ11B%&^%#j~;`V>&_wZ zy)dbxKR>Q)pWWKr<ycJc5Kq#pu_D#Ju1k_g=x3;$=X=|-8~yT-mUZX#3;u@wirUB2 zZ}h)_)qBNkZRLK%&aOA+T804a&oFl|_=H~8xDJ)#z^tOyl{0lldJsaCMGypZ>yjLw zqq1sTAF{FC1pIa}eP#d+ha&cUFloB#Te?Xzyh~GW1Vo|}{AVJb!Vfi+KVx-2sQN|E zm}#eHWgJH{)NA8^zS^h7z0<|{yLX;0)C9Y51+fz+E!mvDGNnO*TJrmR+HSgj3WNaF zCPmqR_-bOcy-4RAbQo`=Dm*~`Z>JN?e9pYWxETB(;6sSgW*Jgk>IJIg*_9tU5(HW& z5Cl|F4}^wpL^^PLYb8nB7wC7{f$DzRd)*}8)ghjdYV)-CpNN&>0NRZR#gx>7?z(Kh z*Psy4OYu$onuxwwWGfyHT$NG?p6K*3!PeETfuxVKa2#H>eZ@O@lC1JIda9;rCEJb^ zoyn1P*J=rPJ6syezskh@QX*_!6r!_nN6{8k%^)}Y#@xb=K%+nh<uZBl%{&Qx*!q5j zL;9FkSRs!b6COa!CT^<?ocqNtvIim!aU)d(qMXB&#-m?xKA}L5wG$md&v%C^5B5!( zEjo^<Q`|LKP+$Ei>d$Q5ge@(JUVc%!x1RNh$g<ipQr(dPSz<xq`+KnJm1S<U`nC=> z*Tz+Rh8A~s4kZ-M^h}w-iqA}(m#7)@zu>UGE{4H$N+$h_nnh?Kzm6UAb)=vA^NH8f zjgFlyEL(Bqe1Gs8y42k>l<LvL(!%u!V)0d{oQ@SUwE768<{bL&<K(cHR4~k+h#GA2 z%acnQ^KOjU+iAts$16D;9DjH7Yg;qu#ULokL+7OqNhQEui31?YKw5@GFnU3B(h)<S z<BABI6Urw2*A|2edoPmL7IOsW*|o^C@OO2OLhB)NCP^~r6Uo;rrQ+2DCT>R0H%(n; zbAsCRVXfIaQ*w+{gfuK<d4~2`B+FRp6=$w3-m8nWh#4Rfg>yG+*UA`9vr#ZiyNO>z zJ5;83TjJ_hq=6Asc<;3fxIJ_GGY>lUG-|^``o;HwHbPj<*;jb1$D8|fV_<o8l6-JJ z@k=&Ic)_8q%oSr{TkIz|=(?pZ+$z3pDPA^+#{wl3vb$E2CBRy*^l$u6x0gOIODt_g z9JVWXW3_B^vejZwu3N6w`HSf6<RmdgzvVFNU5X^|4{;Io4*EgA>_Pm0%~&|U$mT#H z8YgT4mYb`v`4)eD9FQp<WxwU5(M5B6@Vs8JvMyLBEy!bk9^2v`0GZWd@Kh;n^GfP_ z*RSdw20gYd(^VPmu_8Pgq4NAzwSJ=N4~rM�uPh-o}J3(rT;>&3G%C5oM$5>&}r( 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 bgBwMfszaH)jJ*PPg53L6s`Vl(@Bjb+gIqKt literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 993b288c5..c234153b8 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -13,13 +13,13 @@ </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <section class="intro full-width"> <div class="wrapintro"> <h1>Chris KY Fung's Page</h1> <h2 class="lead">Feel free to bookmark this to keep an eye on my project updates</h2> <a href="/blog/" class="btn">Latest posts</a> </div> </section> -<section class="featured-posts"> <div class="section-title"> <h2><span>Recent Posts</span></h2> </div> <div class="row listfeaturedtag"> <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.webp" alt="thumbnail for Qwiklabs Lab..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.jpg" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Qwiklabs Lab..." src="/images/posts/qwiklabs/science-1408800_1280.webp"></amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" rel="bookmark">Qwiklabs Lab Completion Tracker - Version History</a></h3> <p class="card-text">The changelog, the feature highlights, and the screenshots of the previous versions of the "Qwiklabs Lab Complet...</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> +<section class="featured-posts"> <div class="section-title"> <h2><span>Recent Posts</span></h2> </div> <div class="row listfeaturedtag"> <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command....</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> +</div> + <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.webp" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.jpg" alt="thumbnail for Qwiklabs Lab..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" rel="bookmark">Qwiklabs Lab Completion Tracker - Version History</a></h3> <p class="card-text">The changelog, the feature highlights, and the screenshots of the previous versions of the "Qwiklabs Lab Complet...</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> </div> <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/matlab/matlab-packages.webp" alt="thumbnail for My MATLAB Pa..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/matlab/matlab-packages.jpg" alt="thumbnail for My MATLAB Pa..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes" rel="bookmark">My MATLAB Package and Toolbox Picks</a></h3> <p class="card-text">A collection of useful MATLAB packages and toolboxes that support and improve your workflow, data visualization,...</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> </div> <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.webp" alt="thumbnail for ☁ Serverless..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.png" alt="thumbnail for ☁ Serverless..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" rel="bookmark">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP344 on Qwiklabs. You will practice the skills for ...</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> -</div> - <div class="col-sm-6"> <article class="card"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" aria-hidden="true" tabindex="-1"> <div class="thumbnail"><figure><amp-img width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.webp" alt="thumbnail for ☁ Build and ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="208" height="258" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.png" alt="thumbnail for ☁ Build and ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1OCIgd2lkdGg9IjIwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="col-md-7 wrapmeta"> <div class="card-block"> <h3 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" rel="bookmark">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab |...</a></h3> <p class="card-text">A brief procedure for the Google Cloud self-paced training GSP340 on Qwiklabs. You will practice the skills for ...</p> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </article> </div> </div> </section> <section class="recent-posts row"> <div class="col-sm-4"> <div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Home" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Home" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> @@ -31,8 +31,7 @@ </div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div> </div> <div class="col-sm-8"> <hr> <section class="article-post"> <h2 class="mt-4"><i class="fas fa-bong"></i> Welcome to my New Site</h2> <p>This site is a new version of my old site "<a href="https://chrisfung1125.wixsite.com/research-blog/" target="_blank">Blog of a POLIDA post-grad II .</a>" which was hosting in Wix.com. Now it has been moved to the GitHub page. It should deliver a much faster page loading speed and a nicer display of codes. I hope you will better enjoy my content.</p> </section> <hr> <section id="projects" class="article-post"> <div class="section-title"> <h2><span>Pinned Projects</span></h2> </div> <section id="personal-project-list"> <h3 class="section-title">Personal Projects</h3> <h4 class="project-title"><i class="fab fa-instagram"></i> <i class="fas fa-cloud-download-alt"></i> <i class="fab fa-google-drive"></i><br><a href="https://chriskyfung.github.io/AutoFetcher-IG-Stories-to-GDrive/" target="_blank">AutoFetcher for Saving IG Stories to GDrive</a></h4> <figure><amp-img width="574" height="287" layout="intrinsic" src="/images/projects/instagram-to-drive_574x287_o55.webp" alt="Instagram to Google Drive Download Bot" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="287" layout="intrinsic" src="/images/projects/instagram-to-drive_574x287_o55.jpg" alt="Instagram to Google Drive Download Bot" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>A Google Apps Script for deploying a web application that automatically fetches the available latest IG Stories of a target Instagram user to your Google Drive.</p> <h4 class="project-title"><i class="fab fa-windows"></i> <i class="fas fa-keyboard"></i> <i class="fas fa-microphone"></i><br><a href="https://chriskyfung.github.io/Agile-Win-Hotkey-for-iFlyVoice/" target="_blank">Agile Win Hotkey for iFlyVoice</a></h4> <figure><amp-img width="574" height="287" layout="intrinsic" src="/images/projects/windows-hotkey-for-iflyvoice_574.webp" alt="Agile Win Hotkey for iFlyVoice" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="287" layout="intrinsic" src="/images/projects/windows-hotkey-for-iflyvoice_574.png" alt="Agile Win Hotkey for iFlyVoice" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h4 class="project-title"><i class="fas fa-wrench"></i> <i class="fas fa-tachometer-alt"></i><br><a href="https://craftweeks.com/en/software/mdxlabpanel/" target="_blank">MDX LabPanel</a></h4> <p>GUI Control Panel for Roland MODELA MDX-15/20 CNC Machine</p> <figure><amp-img width="574" height="406" layout="intrinsic" src="/images/projects/screenshot-of-mdxlabpanel-v04-a-control-panel-roland-modela-mdx-1520.webp" alt="MDX LabPanel" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwNiIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="406" layout="intrinsic" src="/images/projects/screenshot-of-mdxlabpanel-v04-a-control-panel-roland-modela-mdx-1520.png" alt="MDX LabPanel" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwNiIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Screenshot of MDX LabPanel v0.4</figcaption></figure> </section> <section id="academic-project-list"> <h3 class="section-title">Academic Projects</h3> <p class="keywords"><i>keywords: Molecular Dynamics, LAMMPS, OVITO</i></p> <h4 class="project-title"><i class="fas fa-atom"></i> <i class="fas fa-flask"></i> <i class="fas fa-university"></i><br><a href="/tag/lammps/">Skills and User Tips for "Large-scale Atomic/Molecular Massively Parallel Simulator" (LAMMPS)</a></h4> <ul> <li>How to Send a Notification from a LAMMPS Simulation to Your Email</li> <li>Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables</li> <li>[template] OVITO python modifier</li> </ul> </section> </section> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div> </div> <div class="col-sm-8"> <hr> <section class="article-post"> <h2 class="mt-4"><i class="fas fa-bong"></i> Welcome to my New Site</h2> <p>This site is a new version of my old site "<a href="https://chrisfung1125.wixsite.com/research-blog/" target="_blank">Blog of a POLIDA post-grad II .</a>" which was hosting in Wix.com. Now it has been moved to the GitHub page. It should deliver a much faster page loading speed and a nicer display of codes. I hope you will better enjoy my content.</p> </section> <hr> <section id="projects" class="article-post"> <div class="section-title"> <h2><span>Pinned Projects</span></h2> </div> <section id="personal-project-list"> <h3 class="section-title">Personal Projects</h3> <h4 class="project-title"><i class="fab fa-instagram"></i> <i class="fas fa-cloud-download-alt"></i> <i class="fab fa-google-drive"></i><br><a href="https://chriskyfung.github.io/AutoFetcher-IG-Stories-to-GDrive/" target="_blank">AutoFetcher for Saving IG Stories to GDrive</a></h4> <figure><amp-img width="574" height="287" layout="intrinsic" src="/images/projects/instagram-to-drive_574x287_o55.webp" alt="Instagram to Google Drive Download Bot" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="287" layout="intrinsic" src="/images/projects/instagram-to-drive_574x287_o55.jpg" alt="Instagram to Google Drive Download Bot" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <p>A Google Apps Script for deploying a web application that automatically fetches the available latest IG Stories of a target Instagram user to your Google Drive.</p> <h4 class="project-title"><i class="fab fa-windows"></i> <i class="fas fa-keyboard"></i> <i class="fas fa-microphone"></i><br><a href="https://chriskyfung.github.io/Agile-Win-Hotkey-for-iFlyVoice/" target="_blank">Agile Win Hotkey for iFlyVoice</a></h4> <figure><amp-img width="574" height="287" layout="intrinsic" src="/images/projects/windows-hotkey-for-iflyvoice_574.webp" alt="Agile Win Hotkey for iFlyVoice" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="287" layout="intrinsic" src="/images/projects/windows-hotkey-for-iflyvoice_574.png" alt="Agile Win Hotkey for iFlyVoice" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI4NyIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure> <h4 class="project-title"><i class="fas fa-wrench"></i> <i class="fas fa-tachometer-alt"></i><br><a href="https://craftweeks.com/en/software/mdxlabpanel/" target="_blank">MDX LabPanel</a></h4> <p>GUI Control Panel for Roland MODELA MDX-15/20 CNC Machine</p> <figure><amp-img width="574" height="406" layout="intrinsic" src="/images/projects/screenshot-of-mdxlabpanel-v04-a-control-panel-roland-modela-mdx-1520.webp" alt="MDX LabPanel" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwNiIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="574" height="406" layout="intrinsic" src="/images/projects/screenshot-of-mdxlabpanel-v04-a-control-panel-roland-modela-mdx-1520.png" alt="MDX LabPanel" on="tap:lightbox1" role="button" tabindex="0" aria-label="lightbox" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwNiIgd2lkdGg9IjU3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img><figcaption>Screenshot of MDX LabPanel v0.4</figcaption></figure> </section> <section id="academic-project-list"> <h3 class="section-title">Academic Projects</h3> <p class="keywords"><i>keywords: Molecular Dynamics, LAMMPS, OVITO</i></p> <h4 class="project-title"><i class="fas fa-atom"></i> <i class="fas fa-flask"></i> <i class="fas fa-university"></i><br><a href="/tag/lammps/">Skills and User Tips for "Large-scale Atomic/Molecular Massively Parallel Simulator" (LAMMPS)</a></h4> <ul> <li>How to Send a Notification from a LAMMPS Simulation to Your Email</li> <li>Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables</li> <li>[template] OVITO python modifier</li> </ul> </section> </section> </div> </section> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/privacy-policy.html b/privacy-policy.html index 2fef90750..20fb9874a 100644 --- a/privacy-policy.html +++ b/privacy-policy.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -22,19 +22,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Privacy Policy" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/search.html b/search.html index 9808f6fd8..c815c9435 100644 --- a/search.html +++ b/search.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -21,19 +21,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Search" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/sitemap.xml b/sitemap.xml index a8457471e..825a06ccc 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -233,6 +233,10 @@ <lastmod>2021-09-30T18:00:00+08:00</lastmod> </url> <url> +<loc>https://chriskyfung.github.io/github-cli-repo-clone-custom-completion/</loc> +<lastmod>2024-12-27T15:12:00+08:00</lastmod> +</url> +<url> <loc>https://chriskyfung.github.io/about</loc> </url> <url> @@ -434,6 +438,15 @@ <loc>https://chriskyfung.github.io/tag/tensorflow/</loc> </url> <url> +<loc>https://chriskyfung.github.io/tag/bash/</loc> +</url> +<url> +<loc>https://chriskyfung.github.io/tag/github-cli/</loc> +</url> +<url> +<loc>https://chriskyfung.github.io/tag/autocompletions/</loc> +</url> +<url> <loc>https://chriskyfung.github.io/category/academic/</loc> </url> <url> @@ -474,14 +487,14 @@ </url> <url> <loc>https://chriskyfung.github.io/google0274dbf4a33f8f07.html</loc> -<lastmod>2024-11-29T00:12:55+08:00</lastmod> +<lastmod>2024-12-27T17:22:00+08:00</lastmod> </url> <url> <loc>https://chriskyfung.github.io/images/projects/qwiklabs-quests-map.html</loc> -<lastmod>2024-11-29T00:12:55+08:00</lastmod> +<lastmod>2024-12-27T17:22:00+08:00</lastmod> </url> <url> <loc>https://chriskyfung.github.io/yandex_3e10a2d0cfd334f2.html</loc> -<lastmod>2024-11-29T00:12:55+08:00</lastmod> +<lastmod>2024-12-27T17:22:00+08:00</lastmod> </url> </urlset> diff --git a/tag/android-studio/index.html b/tag/android-studio/index.html index e68b7d3d2..cdbc97e6e 100644 --- a/tag/android-studio/index.html +++ b/tag/android-studio/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -24,19 +24,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Android Studio" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/apigee/index.html b/tag/apigee/index.html index 8680d9677..7861350f7 100644 --- a/tag/apigee/index.html +++ b/tag/apigee/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Apigee" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/autocompletions/index.html b/tag/autocompletions/index.html new file mode 100644 index 000000000..652e68134 --- /dev/null +++ b/tag/autocompletions/index.html @@ -0,0 +1,49 @@ +<!DOCTYPE html><html amp lang="en" i-amphtml-binding i-amphtml-layout i-amphtml-no-boilerplate transformed="self;v=1"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="preload" href="/assets/images/logo-plainSVG.svg" as="image"><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png" as="image"><meta name="generator" content="Jekyll v4.2.2"><meta property="og:title" content="Autocompletions"><meta name="author" content="Chris KY Fung"><meta property="og:locale" content="en_US"><meta name="description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:url" content="https://chriskyfung.github.io/tag/autocompletions/"><meta property="og:site_name" content="Chris KY FUNG’s Blog"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><meta property="twitter:title" content="Autocompletions"><meta name="google-site-verification" content="WvB_kR1tvqtLYj1YxGXkQp6X-ue8FgK5kfQOB2K8cZA"><style amp-runtime i-amphtml-version="012410292120000">html{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch-action:pan-y pinch-zoom;touch-action:pan-y pinch-zoom}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not(.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important}html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling:touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px solid transparent!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox-element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram{padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions-dialog],body:not(.i-amphtml-subs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display:none}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list[load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load-more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px!important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-color:#000!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtml-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important}amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,.33)}.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden}amp-script[nodom],amp-script[sandboxed]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden} +/*# sourceURL=/css/ampdoc.css*/[hidden]{display:none!important}.i-amphtml-element{display:inline-block}.i-amphtml-blurry-placeholder{transition:opacity 0.3s cubic-bezier(0.0,0.0,0.2,1)!important;pointer-events:none}[layout=nodisplay]:not(.i-amphtml-element){display:none!important}.i-amphtml-layout-fixed,[layout=fixed][width][height]:not(.i-amphtml-layout-fixed){display:inline-block;position:relative}.i-amphtml-layout-responsive,[layout=responsive][width][height]:not(.i-amphtml-layout-responsive),[width][height][heights]:not([layout]):not(.i-amphtml-layout-responsive),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-layout-responsive){display:block;position:relative}.i-amphtml-layout-intrinsic,[layout=intrinsic][width][height]:not(.i-amphtml-layout-intrinsic){display:inline-block;position:relative;max-width:100%}.i-amphtml-layout-intrinsic .i-amphtml-sizer{max-width:100%}.i-amphtml-intrinsic-sizer{max-width:100%;display:block!important}.i-amphtml-layout-container,.i-amphtml-layout-fixed-height,[layout=container],[layout=fixed-height][height]:not(.i-amphtml-layout-fixed-height){display:block;position:relative}.i-amphtml-layout-fill,.i-amphtml-layout-fill.i-amphtml-notbuilt,[layout=fill]:not(.i-amphtml-layout-fill),body noscript>*{display:block;overflow:hidden!important;position:absolute;top:0;left:0;bottom:0;right:0}body noscript>*{position:absolute!important;width:100%;height:100%;z-index:2}body noscript{display:inline!important}.i-amphtml-layout-flex-item,[layout=flex-item]:not(.i-amphtml-layout-flex-item){display:block;position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.i-amphtml-layout-fluid{position:relative}.i-amphtml-layout-size-defined{overflow:hidden!important}.i-amphtml-layout-awaiting-size{position:absolute!important;top:auto!important;bottom:auto!important}i-amphtml-sizer{display:block!important}@supports (aspect-ratio:1/1){i-amphtml-sizer.i-amphtml-disable-ar{display:none!important}}.i-amphtml-blurry-placeholder,.i-amphtml-fill-content{display:block;height:0;max-height:100%;max-width:100%;min-height:100%;min-width:100%;width:0;margin:auto}.i-amphtml-layout-size-defined .i-amphtml-fill-content{position:absolute;top:0;left:0;bottom:0;right:0}.i-amphtml-replaced-content,.i-amphtml-screen-reader{padding:0!important;border:none!important}.i-amphtml-screen-reader{position:fixed!important;top:0px!important;left:0px!important;width:4px!important;height:4px!important;opacity:0!important;overflow:hidden!important;margin:0!important;display:block!important;visibility:visible!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:8px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:12px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:16px!important}.i-amphtml-unresolved{position:relative;overflow:hidden!important}.i-amphtml-select-disabled{-webkit-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.i-amphtml-notbuilt,[layout]:not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){position:relative;overflow:hidden!important;color:transparent!important}.i-amphtml-notbuilt:not(.i-amphtml-layout-container)>*,[layout]:not([layout=container]):not(.i-amphtml-element)>*,[width][height][heights]:not([layout]):not(.i-amphtml-element)>*,[width][height][sizes]:not([layout]):not(.i-amphtml-element)>*{display:none}amp-img:not(.i-amphtml-element)[i-amphtml-ssr]>img.i-amphtml-fill-content{display:block}.i-amphtml-notbuilt:not(.i-amphtml-layout-container),[layout]:not([layout=container]):not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){color:transparent!important;line-height:0!important}.i-amphtml-ghost{visibility:hidden!important}.i-amphtml-element>[placeholder],[layout]:not(.i-amphtml-element)>[placeholder],[width][height][heights]:not([layout]):not(.i-amphtml-element)>[placeholder],[width][height][sizes]:not([layout]):not(.i-amphtml-element)>[placeholder]{display:block;line-height:normal}.i-amphtml-element>[placeholder].amp-hidden,.i-amphtml-element>[placeholder].hidden{visibility:hidden}.i-amphtml-element:not(.amp-notsupported)>[fallback],.i-amphtml-layout-container>[placeholder].amp-hidden,.i-amphtml-layout-container>[placeholder].hidden{display:none}.i-amphtml-layout-size-defined>[fallback],.i-amphtml-layout-size-defined>[placeholder]{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:1}amp-img[i-amphtml-ssr]:not(.i-amphtml-element)>[placeholder]{z-index:auto}.i-amphtml-notbuilt>[placeholder]{display:block!important}.i-amphtml-hidden-by-media-query{display:none!important}.i-amphtml-element-error{background:red!important;color:#fff!important;position:relative!important}.i-amphtml-element-error:before{content:attr(error-message)}i-amp-scroll-container,i-amphtml-scroll-container{position:absolute;top:0;left:0;right:0;bottom:0;display:block}i-amp-scroll-container.amp-active,i-amphtml-scroll-container.amp-active{overflow:auto;-webkit-overflow-scrolling:touch}.i-amphtml-loading-container{display:block!important;pointer-events:none;z-index:1}.i-amphtml-notbuilt>.i-amphtml-loading-container{display:block!important}.i-amphtml-loading-container.amp-hidden{visibility:hidden}.i-amphtml-element>[overflow]{cursor:pointer;position:relative;z-index:2;visibility:hidden;display:initial;line-height:normal}.i-amphtml-layout-size-defined>[overflow]{position:absolute}.i-amphtml-element>[overflow].amp-visible{visibility:visible}template{display:none!important}.amp-border-box,.amp-border-box *,.amp-border-box :after,.amp-border-box :before{box-sizing:border-box}amp-pixel{display:none!important}amp-analytics,amp-auto-ads,amp-story-auto-ads{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}amp-story{visibility:hidden!important}html.i-amphtml-fie>amp-analytics{position:initial!important}[visible-when-invalid]:not(.visible),form [submit-error],form [submit-success],form [submitting]{display:none}amp-accordion{display:block!important}@media (min-width:1px){:where(amp-accordion>section)>:first-child{margin:0;background-color:#efefef;padding-right:20px;border:1px solid #dfdfdf}:where(amp-accordion>section)>:last-child{margin:0}}amp-accordion>section{float:none!important}amp-accordion>section>*{float:none!important;display:block!important;overflow:hidden!important;position:relative!important}amp-accordion,amp-accordion>section{margin:0}amp-accordion:not(.i-amphtml-built)>section>:last-child{display:none!important}amp-accordion:not(.i-amphtml-built)>section[expanded]>:last-child{display:block!important} +/*# sourceURL=/css/ampshared.css*/</style><script async src="https://cdn.ampproject.org/v0.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0.js" crossorigin="anonymous"></script><script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-ad-0.1.js" crossorigin="anonymous" custom-element="amp-ad"></script><script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" crossorigin="anonymous" custom-element="amp-analytics"></script><script async custom-element="amp-auto-ads" src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js" crossorigin="anonymous" custom-element="amp-auto-ads"></script><script async custom-element="amp-autocomplete" src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.js" crossorigin="anonymous" custom-element="amp-autocomplete"></script><script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-bind-0.1.js" crossorigin="anonymous" custom-element="amp-bind"></script><script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-consent-0.1.js" crossorigin="anonymous" custom-element="amp-consent"></script><script async custom-element="amp-font" src="https://cdn.ampproject.org/v0/amp-font-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-font-0.1.js" crossorigin="anonymous" custom-element="amp-font"></script><script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-form-0.1.js" crossorigin="anonymous" custom-element="amp-form"></script><script async custom-element="amp-fx-collection" src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.js" crossorigin="anonymous" custom-element="amp-fx-collection"></script><script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js" crossorigin="anonymous" custom-element="amp-iframe"></script><script async custom-element="amp-image-lightbox" src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-image-lightbox"></script><script async custom-element="amp-lightbox" src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-lightbox"></script><script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-script-0.1.js" crossorigin="anonymous" custom-element="amp-script"></script><link rel="icon" href="/assets/images/favicon_96x96.png"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.1/css/all.css" crossorigin><title>Autocompletions | Chris KY FUNG’s Blog</title><link rel="canonical" href="https://chriskyfung.github.io/tag/autocompletions/"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"Chris KY Fung"},"description":"Feel free to bookmark this to keep an eye on my project updates","headline":"Autocompletions","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://chriskyfung.github.io/assets/images/logo-plainSVG.svg"},"name":"Chris KY Fung"},"url":"https://chriskyfung.github.io/tag/autocompletions/"}</script><link rel="preconnect dns-prefetch" href="https://www.googletagmanager.com" crossorigin><link rel="preconnect dns-prefetch" href="https://fonts.gstatic.com/" crossorigin><style amp-custom>html{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}kbd,samp{font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#0275d8;text-decoration:none}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:100%;margin:0}optgroup{line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}textarea{overflow:auto}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote,figure{margin:0 0 1rem}img{vertical-align:middle}[role=button],a,area,button,input,label,select,summary,textarea{cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;caption-side:bottom}caption,th{text-align:left}dd,label{margin-bottom:.5rem}label{display:inline-block}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}.lead{font-size:1.25rem;font-weight:300}.small,small{font-size:80%;font-weight:400}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}.figure-caption{font-size:90%;color:#636c72}code,pre{font-size:90%}code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code,pre code{padding:0;color:inherit;background-color:inherit}pre{display:block;margin-top:0;margin-bottom:1rem;color:#292b2c}pre code{font-size:inherit;background-color:transparent;border-radius:0}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto{-webkit-box-flex:0}.col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (min-width:576px){.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-sm-3,.col-sm-4,.col-sm-6,.col-sm-8{-webkit-box-flex:0}.col-sm-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-group{margin-bottom:1rem}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn:disabled{cursor:not-allowed;opacity:.65}.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}.collapsing{height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-item{padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav,.navbar-nav .row{list-style:none}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md,.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md,.navbar-toggleable-md>.container{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse,.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar-toggleable-md .navbar-collapse{width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, .5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.alert,.pagination{border-radius:.25rem}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.modal-open,.model{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}}.clearfix:after{display:block;content:"";clear:both}.justify-content-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (min-width:992px){.float-lg-left{float:left}.float-lg-right{float:right}.float-lg-none{float:none}}.mr-2{margin-right:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.p-0{padding:0}.pt-3{padding-top:1rem}.ml-auto{margin-left:auto}.pr-lg-3{padding-right:1rem}.text-center{text-align:center}body,pre{font-display:swap}body{font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,sans-serif;overflow-x:hidden}.mainheading{padding:0 0 1rem}a{color:#6fd350}a,a:hover{transition:all .2s}pre{-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 1.75em;border:1px solid #e3edf3;width:100%;padding:10px;font-size:14px;white-space:pre;overflow:auto;background:#f7fafb;border-radius:3px;line-height:1.3}.mediumnavigation{background:#fff;transition:top .5s ease-in-out;padding:1.5rem 1rem;box-shadow:0 10px 40px 0 rgba(0,0,0,.05)}.navbar-toggler-right{position:absolute;right:-2%;top:0}.nav-up{box-shadow:none}.site-content{padding-top:2rem;margin-top:57px;transition:all .4s}section{margin-bottom:20px}section.featured-posts{margin-bottom:30px}section.recent-posts{margin-bottom:0}.section-title h2{font-weight:700;font-size:1.4rem;margin-bottom:27px;position:relative}.section-title h2:before{margin-bottom:0;position:absolute;z-index:1;left:15px;right:0;top:12px;height:1px;content:"";background-color:#f5f5f5}.section-title span{background-color:#fff;position:relative;z-index:2;display:inline-block;padding:0 15px 0 0;font-size:14px;text-transform:uppercase;letter-spacing:1px}.layout-page .section-title span{font-size:2rem;text-transform:none;letter-spacing:0}.layout-page .section-title h2:before{top:17px}.article-post ol,.article-post ul{margin-bottom:1.5rem}.prevnextlinks .thepostlink{padding:20px 0;font-size:17px;display:block;color:#111;font-weight:500}.prevnextlinks{border-top:1px solid #eee;border-bottom:1px solid #eee;margin-left:0;margin-right:0}.prevnextlinks .rightborder{border-right:1px solid #eee}.navbar-toggleable-md .navbar-nav .nav-link.highlight{background:#6fd350;color:#fff;border-radius:4px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);padding-left:1em;padding-right:1em}.navbar-toggler{z-index:9999}.navbar-toggleable-md .navbar-nav .nav-link{color:#333;font-size:.94em;font-weight:500;letter-spacing:1px;margin-left:0;margin-top:10px;text-transform:uppercase}.mediumnavigation .dropdown-menu{margin:0 0 15px;box-shadow:none;border:0}.card-columns .card{margin-bottom:20px}.listfeaturedtag .wrapmeta,.listfeaturedtag .wrapthumbnail{position:relative;width:100%;min-height:1px;max-width:100%;-webkit-box-flex:0;-webkit-flex:100%;-ms-flex:100%;flex:100%}.listfeaturedtag .wrapthumbnail{padding:0 15px}.listfeaturedtag .wrapmeta{padding:0}.listfeaturedtag .wrapthumbnail{height:250px}.listfeaturedtag .card{border:0;border-radius:2px;height:calc(100% - 15px);padding-left:0;margin-bottom:15px;box-shadow:1px 2px 14px 0 rgba(0,0,0,.2)}.listfeaturedtag .card-block{padding:20px 20px 50px}.listfeaturedtag .thumbnail{background-size:cover;height:100%;display:block;background-position:38% 22%;background-origin:border-box;border-top-left-radius:2px}.listfeaturedtag .card-title,.listrecent .card-title{font-size:1.3rem;font-weight:500;line-height:1.25}.listfeaturedtag .card-title a,.listrecent .card-title a{color:#111;font-weight:500}.listfeaturedtag .card-title a:hover,.listrecent .card-title a:hover{color:rgba(0,0,0,.6);text-decoration:none}.card-text{color:#666;font-size:.95rem;line-height:1.8;font-weight:400}.listfeaturedtag .wrapfooter{position:absolute;font-size:12px;display:block;width:100%;left:0;right:0;bottom:-15px;margin:auto;padding:0 20px}.listrecent{width:100%}.listrecent .wrapfooter{font-size:12px;margin-top:30px}.author-thumb{width:40px;height:40px;float:left;margin-right:13px;border-radius:100%}.intro h2,.post-top-meta{margin-bottom:1rem;margin-top:3rem}.post-top-meta span{font-size:.9rem;color:rgba(0,0,0,.44)}.post-top-meta .author-thumb{width:72px;height:72px}.post-top-meta.authorpage .author-thumb{margin-top:40px}.post-top-meta .author-description{margin-bottom:5px;margin-top:10px;font-size:.95rem}.author-meta{flex:1 1 auto;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.alertbar form,.bottompagination span.navigation i,.post-top-meta span,.share ul li,div.post-date,span.author-meta,span.post-name{display:inline-block}div.post-date,span.post-read{color:#75748a;margin:7px 0}.share ul li i.fa,span.post-read-more a{width:30px;height:30px;line-height:30px;text-align:center;border-radius:50%}span.post-read-more a{color:#75748a;align-items:center;float:right;border:1px solid #d0d0d0}span.post-name a,span.post-read-more a:hover{color:rgba(0,0,0,.8)}.dot:after{content:"\00b7";margin-left:3px;margin-right:3px}.mainheading h1.sitetitle{font-family:Georgia,Times New Roman,Times,serif;font-display:swap}.mainheading h1.posttitle{font-weight:700;font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif}.intro{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/head.svg);background-size:contain;margin-top:-87px;margin-bottom:3.5rem;padding:3rem 0;position:relative;z-index:1}.intro .btn{background:#fff100;border:0;color:#333;border-radius:3px;font-weight:500;padding:15px 40px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);text-transform:uppercase;font-size:13px;letter-spacing:1px}.intro h1{font-weight:700}.intro h2{margin-top:1rem;color:#888;line-height:1.6}.wrapintro{background:rgba(211,201,255,.871);max-width:90%;width:700px;margin:0 auto;padding:2rem 1rem;text-align:center}.article-post,.link-dark{color:rgba(0,0,0,.8)}.article-post{font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif;font-size:1.1rem;line-height:1.8}.article-post a{color:inherit;text-decoration:none;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a:hover{box-shadow:inset 0 -30px 0 #ffe51f,0 2px 0 #ffe51f;text-decoration:none}blockquote{border-left:4px solid #6fd350;padding:0 20px;font-style:italic;color:rgba(0,0,0,.5)}.article-post blockquote,.article-post p{margin:0 0 1.5rem}.featured-image{display:block;margin-bottom:2rem}.featured-image[fallback]{margin-bottom:0}.article-post amp-iframe,.article-post amp-img,.featured-image{box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.article-post p iframe{margin-bottom:.5rem}.share{text-align:center;display:none}.share p{margin-bottom:10px;font-size:.95rem}.share ul li{margin-bottom:9px}.share ul{padding-left:0;margin-left:0}.share ul li i.fa{border:1px solid #ddd}.svgIcon{vertical-align:middle}.full-width{width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.share,.share a{color:rgba(0,0,0,.44);fill:rgba(0,0,0,.44)}.graybg{background-color:#fafafa;padding:40px 0 46px;position:relative}.listrecent .card{border-radius:4px;margin-bottom:30px;box-shadow:0 0 1px 0 rgba(0,0,0,.14);border:0}.card .img-thumb{border-top-right-radius:4px;border-top-left-radius:4px}.margtop3rem{margin-top:3rem}.sep{height:1px;width:20px;background:#999;margin:0 auto 1.2rem}.btn,.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:15px}.btn{box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-weight:500;cursor:pointer}.btn,a.btn{color:#fff}.btn-group-lg>.btn,.btn-lg{padding:1rem 2rem}.btn-primary{background-color:#675bff;border-color:#483aff}.btn-primary:hover{background-color:#483aff;border-color:#372cd8}.btn.follow{border-color:#6fd350;color:#6fd350;padding:3px 10px;text-align:center;border-radius:999em;font-size:.85rem;display:inline-block;box-shadow:none;font-weight:400}.btn.subscribe{border-color:#1c9963;border-radius:30px;margin-left:10px;text-transform:uppercase}.post-top-meta .btn.follow{margin-left:5px;margin-top:-4px}.alertbar{box-shadow:0 -3px 10px 0 rgba(0,0,0,.0785);position:fixed;bottom:0;left:0;background-color:#fff;width:100%;padding:14px 0;z-index:1;display:none}.alertbar input[type=email]{font-size:.85rem;padding:3px 5px 3px 10px;border-top-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #ddd;border-right:0;margin-right:-10px;height:34px;letter-spacing:.5px;margin-left:5px}.alertbar input[type=submit],.btn.subscribe{background-color:#1c9963;color:#fff;fill:#fff;font-size:.85rem;font-weight:600}.alertbar input[type=submit]{border:1px solid #1c9963;border-radius:0;padding:4px 10px;border-top-right-radius:3px;border-bottom-right-radius:3px;height:34px;letter-spacing:.5px;cursor:pointer}.form-control::-webkit-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5)}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control{border:1px solid #eee;border-radius:0}.authorpage h1{font-weight:700;font-size:30px}.post-top-meta.authorpage .author-thumb{float:none}.authorpage .author-description{font-size:1rem;color:rgba(0,0,0,.6)}.post-top-meta.authorpage,.sociallinks a,span.navigation{text-align:center}.post-top-meta.authorpage .btn.follow{padding:7px 20px;margin-top:10px;margin-left:0;font-size:.9rem}.graybg.authorpage{border-top:1px solid #f0f0f0}.authorpostbox{width:760px;margin:0 auto 1.5rem;max-width:100%}.authorpostbox .img-thumb{width:100%}.sociallinks{margin:1rem 0}.sociallinks a{background:#666;color:#fff;width:22px;height:22px;display:inline-block;line-height:22px;border-radius:50%;font-size:12px}#comments{margin-top:3rem;margin-bottom:1.5rem}#mc_embed_signup .mc-field-group input{text-indent:5%}#mc_embed_signup{font-family:inherit}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.4;margin-top:0;margin-bottom:.5rem}.article-post h1,.article-post h2,.article-post h3,.article-post h4,.article-post h5,.article-post h6{margin-top:2rem;margin-bottom:1rem}.article-post img.shadow{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.3);-moz-box-shadow:0 0 10px 0 rgba(0,0,0,.3);box-shadow:0 0 10px 0 rgba(0,0,0,.3)}img{height:auto}.bottompagination span.navigation a{background:#fff100;color:#333;padding:5px;border-radius:3px;text-transform:none;font-weight:500;letter-spacing:0;min-width:100px;display:inline-block}.pointerup{margin-bottom:-18px;margin-left:49%;font-size:30px}.pointerup i.fa{color:#eaeaea}span.navigation{display:block;font-size:.93rem;font-weight:700;position:relative}span.navigation:before{margin-bottom:0;position:absolute;z-index:1;left:0;right:0;top:12px;height:1px;content:"";background-color:#eee}.pagination{display:inline-block;background:#fff;z-index:1;position:relative;padding:0 20px;font-size:13px;letter-spacing:.5px;font-weight:500;text-transform:uppercase}iframe,img{max-width:100%}.mediumnavigation .form-control{font-size:.8rem;border-radius:30px;overflow:hidden;border:1px solid rgba(0,0,0,.04)}.mediumnavigation .form-inline{margin-left:15px}.mediumnavigation .form-inline .btn{margin-left:-50px;border:0;border-radius:30px;cursor:pointer}.mediumnavigation .form-inline .btn:active,.mediumnavigation .form-inline .btn:hover{background:0 0;color:green}.mediumnavigation .navbar-brand{font-weight:500;padding:0}.dropdown-item{display:block;width:100%;padding:7px 1.5rem}.dropdown-menu,.mediumnavigation .nav-item{font-size:.9rem}.dropdown-menu{display:none;overflow:auto;z-index:1}.dropdown-toggle:focus~.dropdown-menu,.dropdown:hover .dropdown-menu{display:block}.dropdown:focus-within .dropdown-menu{display:block}.mediumnavigation .search-icon{margin-left:-40px;display:inline-block;margin-top:3px;cursor:pointer}.mediumnavigation .navbar-brand img{margin-right:7px;vertical-align:text-bottom;max-width:none}.navbar-collapse{border-top:1px solid #ddd}.navbar-btngroup{flex-wrap:nowrap;justify-content:right;list-style:none;margin-bottom:0;padding-left:0}.navbar-btngroup .btn{margin-left:.5rem}.navbar-nav{max-height:60vh;overflow:auto}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;overflow:hidden}.fixed-top:focus,.fixed-top:hover{overflow-x:visible;overflow-y:visible}.fixed-top:focus-within{overflow-x:visible;overflow-y:visible}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:#eee;border-radius:0 3px 3px 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#888}.searchbox{display:inline;width:calc(100% - 86px)}:root{--space-2:1rem;--space-3:1.5rem}#consent-ui,#consent-ui .container{background:#fff;font-size:.9rem;transition:right .3s ease}#consent-ui h2{display:flex;align-items:center;color:#675bff;font-size:1.6rem;column-gap:.9rem}#consent-ui .description{margin:.6rem auto .9rem}#consent-ui .description p{color:#333}#consent-ui a{color:#675bff}#consent-ui a:hover{color:#483aff;text-decoration:underline}#consent-ui .buttons{max-width:100%;width:300px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.6rem}#consent-ui .button{background-color:#fff;color:#483aff;padding:8px 16px;border:2px solid #675bff;border-radius:4px;cursor:pointer;min-width:max(140px,calc(100% / 2 - 10px));transition:all .2s ease}#consent-ui .button:hover{background-color:#483aff;color:#fff}#consent-ui .button.fill{border:none;background:#675bff;color:#fff}#consent-ui .button.fill:hover{background-color:#483aff}#cookie-consent-banner{padding:.9rem 1.5rem .1rem;display:flex;flex-wrap:wrap;justify-content:space-evenly;column-gap:.9rem}#cookie-consent-banner header{max-width:768px;min-width:min(375px,100%);width:calc(100% - 320px)}#cookie-consent-banner h2{font-size:1.25rem;column-gap:.5rem}#cookie-preference-modal{position:fixed;top:50%;left:50%;max-width:345px;width:100%;border-radius:8px;padding:1.25rem 1.5rem 1.75rem;transform:translate(-50%,-50%);box-shadow:0 5px 10px rgba(0,0,0,.1)}#consent-choices{margin:1rem;display:flex;flex-direction:column}.consentLabel input{margin:.5rem}#post-consent-ui{position:fixed;bottom:50px;left:20px;z-index:99}#post-consent-ui button{border-radius:50%;font-size:1.66rem;width:3rem;height:3rem;padding:0;border:3px solid #483aff}.invitation-codes a{background:linear-gradient(139deg,#ffc92f,#ff185c,#f316d5,#b81ed2);font-family:Arial,Helvetica,sans-serif;font-size:16px;color:#fff;font-weight:700;border-radius:5px;padding:0 10px;height:36px;display:inline-block}.invitation-codes svg{float:left;vertical-align:middle;display:inline;margin-right:4.5px;margin-left:4.5px;padding-top:7px;height:28px}.invitation-codes span{padding:0 12px;vertical-align:middle;float:left;line-height:34px}amp-ad{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png);background-position:50%;background-repeat:no-repeat;background-size:50px}.article-post .anchor-link{visibility:hidden;box-shadow:none;color:#daa520;font-size:1rem;margin-left:.5rem;vertical-align:super}.article-post .anchor-link:hover{box-shadow:none}.anchor-link:focus,.article-post :hover>.anchor-link{visibility:visible}amp-img[aria-label=lightbox]{cursor:zoom-in}amp-image-lightbox img{object-fit:scale-down}amp-image-lightbox button:last-of-type{cursor:zoom-out;min-width:100%;min-height:100%}amp-image-viewer img{max-width:fit-content;transition:width .25s linear}amp-lightbox{background-color:rgba(0,0,0,.6);z-index:1050}a.vglnk{border-bottom:2px dashed grey;box-shadow:unset}.shadow-none,figure.shadow-none *{box-shadow:none}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.7rem}h4{font-size:1.48rem}h5{font-size:1.3rem}h6{font-size:1.25rem}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 2px 0 0 hsla(0,0%,100%,.7);display:inline-block;font-size:.85em;line-height:1;padding:2px 4px;white-space:nowrap}.article-post h2:not(:first-of-type){margin-top:5rem}.article-post del{color:#999;text-decoration-color:#f05f70}.article-post del a{box-shadow:none;border-bottom:1px solid #ddd;text-decoration:inherit}.article-post .box-highlight{box-shadow:1px 2px 15px #675bff}.article-post figcaption{font-size:smaller}.article-post a>code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a.citation,.article-post a.footnote,.article-post a.reversefootnote{box-shadow:none;background-color:#ffe51f}.card .row,.card>a{height:100%}.container{width:96%;max-width:100%}.inline-fix+*{display:inline}.inline-fix+*+.badge{vertical-align:text-top}.listfeaturedtag .card .thumbnail img{width:500px;height:258px}.listfeaturedtag .card-list{width:100%}.listfeaturedtag .card-list .thumbnail img{width:500px;height:150px;object-fit:cover}.listfeaturedtag .card-list .card-title{font-size:1rem}.listfeaturedtag .card-list .wrapthumbnail{height:150px}.mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.thumbnail.fit-left img{object-position:left}.thumbnail.fit-right img{object-position:right}.screen-reader-only{position:absolute;left:-5000px}.screen-reader-only:focus{left:0}.left-sidebar{order:1}.sidebar{font-size:15px;max-width:100%}.sidebar h3,.sidebar h3 span{text-align:center;position:relative}.sidebar h3{font-size:1.3rem;margin-bottom:1rem;font-weight:700}.sidebar h3 span{background-color:#fff;z-index:2;display:inline-block;padding:0 15px;font-size:14px;text-transform:uppercase;letter-spacing:1px}.sidebar h3:before{margin-bottom:0;position:absolute;z-index:1;left:0;top:12px;width:100%;height:1px;content:"";background-color:#333}.sidebar ul{list-style:none;padding-left:0}.sidebar li a{color:#999;border-bottom:1px solid #f6f6f6;display:block;padding-bottom:10px;padding-top:10px}.sidebar-section{margin-bottom:2rem;padding:30px 10px 30px 20px;box-shadow:0 0 1px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup form{padding:0}.sidebar #mc_embed_signup .button{width:100%;background:#675bff;height:auto;padding:6px 20px;font-weight:600;box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup h2{font-weight:400;font-size:15px;color:#999;margin-bottom:1rem;line-height:1.5;text-align:center}.sidebar #mc_embed_signup .mc-field-group,.sidebar #mc_embed_signup input{width:100%}.tags{list-style:none;padding-left:0;margin:0 0 1.5rem}.tags li{display:inline-block;font-size:.9rem;margin-right:.2rem}.tags li:last-child{margin-right:0}.tags li a{background:#fff100;color:#333;padding:3px 10px;border-radius:3px;font-weight:500;font-size:.93em;text-transform:capitalize;text-decoration:none;box-shadow:0 6px 10px 0 hsla(0,0%,65.9%,.1)}.tags li a:hover{background:rgba(0,0,0,.07);text-decoration:none}.tags.rounded-tags li a{background:0 0;border:1px solid;border-radius:20px}.tags.rounded-tags code a{box-shadow:inherit}.beforefooter{background:linear-gradient(rgba(255,241,0,.8),rgba(255,241,0,.8)),url(https://chriskyfung.github.io/images/header-bg.jpg);background-size:contain;background-position-x:center;background-blend-mode:overlay;color:#111;max-width:100%;margin:50px auto -50px;padding:50px 0;text-align:center}@supports (background-blend-mode:overlay){.beforefooter{background-color:#fff100;background-image:url(https://chriskyfung.github.io/images/header-bg.jpg);background-blend-mode:overlay}}.beforefooter h3{margin-bottom:1rem}.footer{background-color:#171e27;border-top:1px solid rgba(0,0,0,.05);color:#999;margin-top:50px;margin-bottom:0;padding:30px 0;text-align:center}.footer a{color:inherit}.footer a:hover{color:#fff;text-decoration:none}.footer amp-ad{max-width:1140px;margin:auto}.footer-bar{padding-top:1.5rem;font-size:.9em}.footer-bar a{color:#eee}.footer .textwidget a{border-bottom:1px dashed}.footer-widget{font-size:15px;margin-top:1rem;margin-bottom:1rem}.footer-widget .title{font-size:18px;text-transform:uppercase;letter-spacing:1px;color:#fff;margin-bottom:1.5rem}.footer-widget ul{list-style:none;padding-left:0}.footer-widget li{margin:12px 0}.footer-widget .recent-posts img{float:left;margin-right:10px}.footer-widget-blob{background:#e9e4ff;border-radius:60% 70% 500% 70%}.footer-widget-image-wrapper{display:block;margin:auto;max-width:350px}.footersocial h3{font-size:1.48rem}.footersocial .fab{width:40px;height:40px;line-height:40px;text-align:center;display:inline-block;background:#fff;border-radius:3px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-size:18px;margin-left:5px;color:#3c3838;margin-top:10px}.bmc-button img{height:34px;width:35px;margin-bottom:1px;box-shadow:none;border:0;vertical-align:middle}.bmc-button{line-height:35px;height:51px;display:inline-flex;background-color:#ff813f;border-radius:5px;border:1px solid transparent;padding:7px 15px 7px 10px;font-size:28px;letter-spacing:.6px;box-shadow:0 1px 2px hsla(0,0%,74.9%,.5);margin:0 auto;font-family:Cookie,cursive;-webkit-box-sizing:border-box;box-sizing:border-box}.bmc-button,.bmc-button:active,.bmc-button:focus,.bmc-button:hover{text-decoration:none;color:#fff;-webkit-box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5)}.bmc-button:active,.bmc-button:focus,.bmc-button:hover{box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5);opacity:.85}@media (min-width:576px){.beforefooter{text-align:left}.bmc-button{font-size:16.5px}.card-columns.listfeaturedtag{-webkit-column-count:2;-moz-column-count:2;column-count:2}.footer{text-align:left}.footer-widget{margin-bottom:3rem;margin-top:3rem}.left-sidebar{order:-1}.listfeaturedtag .card .thumbnail img{left:-50%;max-width:500px;overflow-x:hidden}.listfeaturedtag .card-list .thumbnail img{width:291px}.sidebar{max-width:340px}}@media (min-width:768px){.bmc-button{font-size:28px}.listfeaturedtag .card .thumbnail img{left:-25%}.post-top-meta.authorpage{text-align:left}}@media (min-width:992px){.intro{padding:9rem 0}.intro h2{margin-top:2rem;margin-bottom:2rem}.listfeaturedtag .card{height:260px}.listfeaturedtag .card .thumbnail img{left:-75%}.listfeaturedtag .card-list{height:auto}.listfeaturedtag .card-block{padding-left:0}.listfeaturedtag .wrapfooter{padding-left:0;right:auto}.listfeaturedtag .wrapmeta{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%;margin-left:-3px}.listfeaturedtag .wrapthumbnail{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;max-width:41.666667%;height:258px;flex:0 0 auto}.mediumnavigation .dropdown-menu{box-shadow:0 0 7px rgba(0,0,0,.2);max-height:60vh}.navbar-collapse{border:0}.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.5rem;margin-top:0}.navbar-nav{max-height:60vh;overflow:visible}.wrapintro{padding:3rem}}@media (min-width:1025px){.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.75rem}}@media (min-width:1200px){.container{width:1140px;max-width:100%}.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:1rem}}@supports (object-fit:cover){.listfeaturedtag .card .thumbnail img{left:inherit;max-width:inherit;object-fit:cover}}.gh-style.btn{position:relative;display:inline-block;padding:5px 16px;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;-webkit-appearance:none;appearance:none;color:#24292e;background-color:#fafbfc;border:1px solid rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25);transition:background-color .2s cubic-bezier(.3,0,.5,1)}.gh-style.btn:hover{text-decoration:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{cursor:default}.gh-style.btn.disabled .octicon,.gh-style.btn:disabled .octicon,.gh-style.btn[aria-disabled=true] .octicon{color:inherit}.gh-style.btn i{font-style:normal;font-weight:500;opacity:.75}.gh-style.btn .octicon{margin-right:4px;color:#6a737d;vertical-align:text-bottom}.gh-style.btn .octicon:only-child{margin-right:0}.gh-style.btn .Counter{margin-left:2px;color:inherit;text-shadow:none;vertical-align:top;background-color:rgba(27,31,35,.08)}.gh-style.btn .dropdown-caret{margin-left:4px;opacity:.8}.gh-style.btn.hover,.gh-style.btn:hover,[open]>.gh-style.btn{background-color:#f3f4f6;transition-duration:.1s}.gh-style.btn.selected,.gh-style.btn:active,.gh-style.btn[aria-selected=true]{background-color:#edeff2;box-shadow:inset 0 1px 0 rgba(225,228,232,.2);transition:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{color:#959da5;background-color:#fafbfc;border-color:rgba(27,31,35,.15)}.gh-style.btn.focus,.gh-style.btn:focus{outline:1px dotted transparent;outline-offset:2px;box-shadow:0 0 0 3px rgba(3,102,214,.3)}.gh-style.btn-primary{color:#fff;background-color:#2ea44f;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.hover,.gh-style.btn-primary:hover,[open]>.gh-style.btn-primary{background-color:#2c974b}.gh-style.btn-primary.selected,.gh-style.btn-primary:active,.gh-style.btn-primary[aria-selected=true]{background-color:#2a8f47;box-shadow:inset 0 1px 0 rgba(20,70,32,.2)}.gh-style.btn-primary.disabled,.gh-style.btn-primary:disabled,.gh-style.btn-primary[aria-disabled=true]{color:hsla(0,0%,100%,.8);background-color:#94d3a2;border-color:rgba(27,31,35,.1);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.focus,.gh-style.btn-primary:focus{box-shadow:0 0 0 3px rgba(46,164,79,.4)}.gh-style.btn-primary .Counter{color:inherit;background-color:hsla(0,0%,100%,.2)}.gh-style.btn-primary .octicon{color:hsla(0,0%,100%,.8)}.gh-style.btn-danger{color:#cb2431;transition:none}.gh-style.btn-danger:hover,[open]>.gh-style.btn-danger{color:#fff;background-color:#cb2431;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-danger:hover .Counter,[open]>.gh-style.btn-danger .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-danger:hover .octicon,[open]>.gh-style.btn-danger .octicon{color:inherit}.gh-style.btn-danger.selected,.gh-style.btn-danger:active,.gh-style.btn-danger[aria-selected=true]{color:#fff;background-color:#be222e;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(134,24,29,.2)}.gh-style.btn-danger.disabled,.gh-style.btn-danger:disabled,.gh-style.btn-danger[aria-disabled=true]{color:rgba(203,36,49,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-danger.disabled .Counter,.gh-style.btn-danger:disabled .Counter,.gh-style.btn-danger[aria-disabled=true] .Counter{background-color:rgba(203,36,49,.05)}.gh-style.btn-danger:focus{box-shadow:0 0 0 3px rgba(203,36,49,.4)}.gh-style.btn-danger .Counter{color:inherit;background-color:rgba(203,36,49,.1)}.gh-style.btn-outline{color:#0366d6;transition:none}.gh-style.btn-outline:hover,[open]>.gh-style.btn-outline{color:#fff;background-color:#0366d6;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-outline:hover .Counter,[open]>.gh-style.btn-outline .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-outline:hover .octicon,[open]>.gh-style.btn-outline .octicon{color:inherit}.gh-style.btn-outline.selected,.gh-style.btn-outline:active,.gh-style.btn-outline[aria-selected=true]{color:#fff;background-color:#035fc7;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(5,38,76,.2)}.gh-style.btn-outline.disabled,.gh-style.btn-outline:disabled,.gh-style.btn-outline[aria-disabled=true]{color:rgba(3,102,214,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-outline.disabled .Counter,.gh-style.btn-outline:disabled .Counter,.gh-style.btn-outline[aria-disabled=true] .Counter{background-color:rgba(3,102,214,.05)}.gh-style.btn-outline:focus{box-shadow:0 0 0 3px rgba(3,102,214,.4)}.gh-style.btn-outline .Counter{color:inherit;background-color:rgba(3,102,214,.1)}.gh-style.btn-blue{color:#fff;background-color:#0361cc;background-image:linear-gradient(-180deg,#0679fc,#0361cc 90%)}.gh-style.btn-blue.focus,.gh-style.btn-blue:focus{box-shadow:0 0 0 .2em rgba(6,121,252,.4)}.gh-style.btn-blue.hover,.gh-style.btn-blue:hover{background-color:#035cc2;background-image:linear-gradient(-180deg,#0374f4,#035cc2 90%);background-position:-.5em;border-color:rgba(27,31,35,.5)}.gh-style.btn-blue.selected,.gh-style.btn-blue:active,.gh-style.btn-blue[aria-selected=true],[open]>.gh-style.btn-blue{background-color:#045cc1;background-image:none;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15)}.gh-style.btn-blue.disabled,.gh-style.btn-blue:disabled,.gh-style.btn-blue[aria-disabled=true]{color:hsla(0,0%,100%,.75);background-color:#81b0e6;background-image:none;border-color:rgba(27,31,35,.15);box-shadow:none}.gh-style.btn-blue .Counter{color:#0366d6;background-color:#fff}.gh-style.btn-sm{padding:3px 12px;font-size:12px;line-height:20px}.gh-style.btn-sm .octicon{vertical-align:text-top}.gh-style.btn-large{padding:.75em 1.5em;font-size:inherit;line-height:1.5;border-radius:.5em}.gh-style.btn-block{display:block;width:100%;text-align:center}.gh-style.btnGroup{display:inline-block;vertical-align:middle}.gh-style.btnGroup:before{display:table;content:""}.gh-style.btnGroup:after{display:table;clear:both;content:""}.gh-style.btnGroup+.gh-style.btn,.gh-style.btnGroup+.gh-style.btnGroup{margin-left:4px}.gh-style.btnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.gh-style.btnGroup-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-item:last-child{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-item.selected,.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-item:hover,.gh-style.btnGroup-item[aria-selected=true]{border-right-width:1px}.gh-style.btnGroup-item.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-item.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-parent{float:left}.gh-style.btnGroup-parent:first-child .gh-style.btnGroup-item{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-parent:last-child .gh-style.btnGroup-item{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-right-width:0;border-radius:0}.gh-style.btnGroup-parent.selected .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true] .gh-style.btnGroup-item{border-right-width:1px}.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-parent:active,.gh-style.btnGroup-parent:focus{z-index:1}.gh-style.btn-link{display:inline-block;padding:0;font-size:inherit;color:#0366d6;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}.gh-style.btn-link:hover{text-decoration:underline}.gh-style.btn-link:disabled,.gh-style.btn-link:disabled:hover,.gh-style.btn-link[aria-disabled=true],.gh-style.btn-link[aria-disabled=true]:hover{color:rgba(88,96,105,.5);cursor:default}.gh-style.btn-invisible{color:#0366d6;background-color:transparent;border:0;border-radius:0;box-shadow:none}.gh-style.btn-invisible.selected,.gh-style.btn-invisible.zeroclipboard-is-active,.gh-style.btn-invisible.zeroclipboard-is-hover,.gh-style.btn-invisible:active,.gh-style.btn-invisible:focus,.gh-style.btn-invisible:hover,.gh-style.btn-invisible[aria-selected=true]{color:#0366d6;background:0 0;outline:0;box-shadow:none}.gh-style.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#586069;vertical-align:middle;background:0 0;border:0}.gh-style.btn-octicon:hover{color:#0366d6}.gh-style.btn-octicon.disabled,.gh-style.btn-octicon[aria-disabled=true]{color:#959da5;cursor:default}.gh-style.btn-octicon.disabled:hover,.gh-style.btn-octicon[aria-disabled=true]:hover{color:#959da5}.gh-style.btn-octicon-danger:hover{color:#cb2431}.gh-style.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.gh-style.btn-with-count:focus{z-index:1}.gh-style.btn:focus .icon-sponsor,.gh-style.btn:focus .icon-sponsoring,.gh-style.btn:hover .icon-sponsor,.gh-style.btn:hover .icon-sponsoring,.Label:focus .icon-sponsor,.Label:focus .icon-sponsoring,.Label:hover .icon-sponsor,.Label:hover .icon-sponsoring{transform:scale(1.1)}.icon-sponsor{overflow:visible}.gh-style{position:fixed;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.5}.octicon{display:inline-block;overflow:visible;vertical-align:text-bottom;fill:currentColor}</style><meta name="amp-script-src" content="sha384-n2-YMnb2FkeDk-Ca2pVnoYSR2FqNKqKgTwfK_UI0EAeVRCAHgCDjsecHJpVMv3Sl"></head><body class="layout-archive" data-amp-auto-lightbox-disable> +<amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> +</amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> +</div> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> +</li></ul> +<ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> +<section class="row recent-posts"> <div class="section-title"> <h1><span>tag 'Autocompletions'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +</div> +</div> </section> </main> <aside class="col-md-4 col-lg-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.jpg" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform">Learning Google Cloud Platform on Qwiklabs: Learning Map, Assisti...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-06-20T23:36:00+08:00" itemprop="dateModified" title="Updated on">20 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Autocompletions" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> +</div> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> +<p>See anything that can be improved?</p> +<p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> +<a class="btn btn-primary btn-lg" href="/contact">Contact Me</a> </div> <div class="col-md-4 text-center footersocial"> <div class="mb-4"> <h3>Support Me</h3> +<a class="bmc-button" href="https://www.buymeacoffee.com/chriskyfung" data-vars-event-label="Buy me a coffee Badge"> <amp-img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" width="35" height="34" layout="fixed" alt aria-hidden="true" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:35px;height:34px;" i-amphtml-layout="fixed"></amp-img> <span style="margin-left:5px;">Buy me a coffee</span> +</a> </div> <div> <h3>Follow Me on</h3><a href="https://www.facebook.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-facebook" aria-hidden="true"></i><span class="sr-only">Facebook</span></a><a href="https://www.pinterest.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-pinterest"></i><span class="sr-only">Pinterest</span></a><a href="https://github.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-github"></i><span class="sr-only">GitHub</span></a><a href="https://medium.com/@chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-medium"></i><span class="sr-only">Medium</span></a> </div> </div> </div> </div> </section> <section class="footer"> <div class="container"> <div class="row"> <div class="col-sm-3"> <div class="footer-widget"> <div class="footer-widget-blob footer-widget-image-wrapper"> <amp-img class="pr-lg-3 i-amphtml-layout-responsive i-amphtml-layout-size-defined" src="/assets/images/knowledge__flatline.svg" height="179" width="255" layout="responsive" alt="ideas and knowledge" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:70.1961%"></i-amphtml-sizer></amp-img> +</div> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title">Disclosures</h3> + +<div id="copyscape-banner"> <a href="https://www.copyscape.com/" data-vars-event-label="Copyscape Badge" aria-label="Copyscape - link opens in a new tab" rel="noopener noreferrer" target="_blank"> <amp-img src="https://banners.copyscape.com/img/copyscape-banner-white-130x46.png" width="130" height="46" alt="© Protected by Copyscape" title="Opens in New Tab" style="width:130px;height:46px;width:130px;height:46px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> </amp-img> </a> +</div> </div> </div> </div> <div class="footer-bar"> <p class="float-lg-left"> Copyright © 2014-2024 <a href="https://chriskyfung.github.io/">Chris KY FUNG</a>. All rights reserved. </p> <p class="float-lg-right">Powered by <a aria-label="theme credit" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/" rel="noopener noreferrer">AMP Affiliately Theme</a> | <a aria-label="privacy policy" href="/privacy-policy">Privacy Policy</a> </p> <div class="clearfix"></div> </div> </div> </section></footer> </div> <amp-image-lightbox id="lightbox1" layout="nodisplay" data-close-button-aria-label="Close" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"></amp-image-lightbox> </body></html> \ No newline at end of file diff --git a/tag/bash/index.html b/tag/bash/index.html new file mode 100644 index 000000000..e01887a30 --- /dev/null +++ b/tag/bash/index.html @@ -0,0 +1,49 @@ +<!DOCTYPE html><html amp lang="en" i-amphtml-binding i-amphtml-layout i-amphtml-no-boilerplate transformed="self;v=1"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="preload" href="/assets/images/logo-plainSVG.svg" as="image"><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png" as="image"><meta name="generator" content="Jekyll v4.2.2"><meta property="og:title" content="Bash"><meta name="author" content="Chris KY Fung"><meta property="og:locale" content="en_US"><meta name="description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:url" content="https://chriskyfung.github.io/tag/bash/"><meta property="og:site_name" content="Chris KY FUNG’s Blog"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><meta property="twitter:title" content="Bash"><meta name="google-site-verification" content="WvB_kR1tvqtLYj1YxGXkQp6X-ue8FgK5kfQOB2K8cZA"><style amp-runtime i-amphtml-version="012410292120000">html{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch-action:pan-y pinch-zoom;touch-action:pan-y pinch-zoom}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not(.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important}html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling:touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px solid transparent!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox-element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram{padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions-dialog],body:not(.i-amphtml-subs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display:none}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list[load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load-more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px!important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-color:#000!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtml-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important}amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,.33)}.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden}amp-script[nodom],amp-script[sandboxed]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden} +/*# sourceURL=/css/ampdoc.css*/[hidden]{display:none!important}.i-amphtml-element{display:inline-block}.i-amphtml-blurry-placeholder{transition:opacity 0.3s cubic-bezier(0.0,0.0,0.2,1)!important;pointer-events:none}[layout=nodisplay]:not(.i-amphtml-element){display:none!important}.i-amphtml-layout-fixed,[layout=fixed][width][height]:not(.i-amphtml-layout-fixed){display:inline-block;position:relative}.i-amphtml-layout-responsive,[layout=responsive][width][height]:not(.i-amphtml-layout-responsive),[width][height][heights]:not([layout]):not(.i-amphtml-layout-responsive),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-layout-responsive){display:block;position:relative}.i-amphtml-layout-intrinsic,[layout=intrinsic][width][height]:not(.i-amphtml-layout-intrinsic){display:inline-block;position:relative;max-width:100%}.i-amphtml-layout-intrinsic .i-amphtml-sizer{max-width:100%}.i-amphtml-intrinsic-sizer{max-width:100%;display:block!important}.i-amphtml-layout-container,.i-amphtml-layout-fixed-height,[layout=container],[layout=fixed-height][height]:not(.i-amphtml-layout-fixed-height){display:block;position:relative}.i-amphtml-layout-fill,.i-amphtml-layout-fill.i-amphtml-notbuilt,[layout=fill]:not(.i-amphtml-layout-fill),body noscript>*{display:block;overflow:hidden!important;position:absolute;top:0;left:0;bottom:0;right:0}body noscript>*{position:absolute!important;width:100%;height:100%;z-index:2}body noscript{display:inline!important}.i-amphtml-layout-flex-item,[layout=flex-item]:not(.i-amphtml-layout-flex-item){display:block;position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.i-amphtml-layout-fluid{position:relative}.i-amphtml-layout-size-defined{overflow:hidden!important}.i-amphtml-layout-awaiting-size{position:absolute!important;top:auto!important;bottom:auto!important}i-amphtml-sizer{display:block!important}@supports (aspect-ratio:1/1){i-amphtml-sizer.i-amphtml-disable-ar{display:none!important}}.i-amphtml-blurry-placeholder,.i-amphtml-fill-content{display:block;height:0;max-height:100%;max-width:100%;min-height:100%;min-width:100%;width:0;margin:auto}.i-amphtml-layout-size-defined .i-amphtml-fill-content{position:absolute;top:0;left:0;bottom:0;right:0}.i-amphtml-replaced-content,.i-amphtml-screen-reader{padding:0!important;border:none!important}.i-amphtml-screen-reader{position:fixed!important;top:0px!important;left:0px!important;width:4px!important;height:4px!important;opacity:0!important;overflow:hidden!important;margin:0!important;display:block!important;visibility:visible!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:8px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:12px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:16px!important}.i-amphtml-unresolved{position:relative;overflow:hidden!important}.i-amphtml-select-disabled{-webkit-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.i-amphtml-notbuilt,[layout]:not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){position:relative;overflow:hidden!important;color:transparent!important}.i-amphtml-notbuilt:not(.i-amphtml-layout-container)>*,[layout]:not([layout=container]):not(.i-amphtml-element)>*,[width][height][heights]:not([layout]):not(.i-amphtml-element)>*,[width][height][sizes]:not([layout]):not(.i-amphtml-element)>*{display:none}amp-img:not(.i-amphtml-element)[i-amphtml-ssr]>img.i-amphtml-fill-content{display:block}.i-amphtml-notbuilt:not(.i-amphtml-layout-container),[layout]:not([layout=container]):not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){color:transparent!important;line-height:0!important}.i-amphtml-ghost{visibility:hidden!important}.i-amphtml-element>[placeholder],[layout]:not(.i-amphtml-element)>[placeholder],[width][height][heights]:not([layout]):not(.i-amphtml-element)>[placeholder],[width][height][sizes]:not([layout]):not(.i-amphtml-element)>[placeholder]{display:block;line-height:normal}.i-amphtml-element>[placeholder].amp-hidden,.i-amphtml-element>[placeholder].hidden{visibility:hidden}.i-amphtml-element:not(.amp-notsupported)>[fallback],.i-amphtml-layout-container>[placeholder].amp-hidden,.i-amphtml-layout-container>[placeholder].hidden{display:none}.i-amphtml-layout-size-defined>[fallback],.i-amphtml-layout-size-defined>[placeholder]{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:1}amp-img[i-amphtml-ssr]:not(.i-amphtml-element)>[placeholder]{z-index:auto}.i-amphtml-notbuilt>[placeholder]{display:block!important}.i-amphtml-hidden-by-media-query{display:none!important}.i-amphtml-element-error{background:red!important;color:#fff!important;position:relative!important}.i-amphtml-element-error:before{content:attr(error-message)}i-amp-scroll-container,i-amphtml-scroll-container{position:absolute;top:0;left:0;right:0;bottom:0;display:block}i-amp-scroll-container.amp-active,i-amphtml-scroll-container.amp-active{overflow:auto;-webkit-overflow-scrolling:touch}.i-amphtml-loading-container{display:block!important;pointer-events:none;z-index:1}.i-amphtml-notbuilt>.i-amphtml-loading-container{display:block!important}.i-amphtml-loading-container.amp-hidden{visibility:hidden}.i-amphtml-element>[overflow]{cursor:pointer;position:relative;z-index:2;visibility:hidden;display:initial;line-height:normal}.i-amphtml-layout-size-defined>[overflow]{position:absolute}.i-amphtml-element>[overflow].amp-visible{visibility:visible}template{display:none!important}.amp-border-box,.amp-border-box *,.amp-border-box :after,.amp-border-box :before{box-sizing:border-box}amp-pixel{display:none!important}amp-analytics,amp-auto-ads,amp-story-auto-ads{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}amp-story{visibility:hidden!important}html.i-amphtml-fie>amp-analytics{position:initial!important}[visible-when-invalid]:not(.visible),form [submit-error],form [submit-success],form [submitting]{display:none}amp-accordion{display:block!important}@media (min-width:1px){:where(amp-accordion>section)>:first-child{margin:0;background-color:#efefef;padding-right:20px;border:1px solid #dfdfdf}:where(amp-accordion>section)>:last-child{margin:0}}amp-accordion>section{float:none!important}amp-accordion>section>*{float:none!important;display:block!important;overflow:hidden!important;position:relative!important}amp-accordion,amp-accordion>section{margin:0}amp-accordion:not(.i-amphtml-built)>section>:last-child{display:none!important}amp-accordion:not(.i-amphtml-built)>section[expanded]>:last-child{display:block!important} +/*# sourceURL=/css/ampshared.css*/</style><script async src="https://cdn.ampproject.org/v0.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0.js" crossorigin="anonymous"></script><script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-ad-0.1.js" crossorigin="anonymous" custom-element="amp-ad"></script><script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" crossorigin="anonymous" custom-element="amp-analytics"></script><script async custom-element="amp-auto-ads" src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js" crossorigin="anonymous" custom-element="amp-auto-ads"></script><script async custom-element="amp-autocomplete" src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.js" crossorigin="anonymous" custom-element="amp-autocomplete"></script><script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-bind-0.1.js" crossorigin="anonymous" custom-element="amp-bind"></script><script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-consent-0.1.js" crossorigin="anonymous" custom-element="amp-consent"></script><script async custom-element="amp-font" src="https://cdn.ampproject.org/v0/amp-font-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-font-0.1.js" crossorigin="anonymous" custom-element="amp-font"></script><script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-form-0.1.js" crossorigin="anonymous" custom-element="amp-form"></script><script async custom-element="amp-fx-collection" src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.js" crossorigin="anonymous" custom-element="amp-fx-collection"></script><script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js" crossorigin="anonymous" custom-element="amp-iframe"></script><script async custom-element="amp-image-lightbox" src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-image-lightbox"></script><script async custom-element="amp-lightbox" src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-lightbox"></script><script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-script-0.1.js" crossorigin="anonymous" custom-element="amp-script"></script><link rel="icon" href="/assets/images/favicon_96x96.png"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.1/css/all.css" crossorigin><title>Bash | Chris KY FUNG’s Blog</title><link rel="canonical" href="https://chriskyfung.github.io/tag/bash/"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"Chris KY Fung"},"description":"Feel free to bookmark this to keep an eye on my project updates","headline":"Bash","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://chriskyfung.github.io/assets/images/logo-plainSVG.svg"},"name":"Chris KY Fung"},"url":"https://chriskyfung.github.io/tag/bash/"}</script><link rel="preconnect dns-prefetch" href="https://www.googletagmanager.com" crossorigin><link rel="preconnect dns-prefetch" href="https://fonts.gstatic.com/" crossorigin><style amp-custom>html{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}kbd,samp{font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#0275d8;text-decoration:none}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:100%;margin:0}optgroup{line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}textarea{overflow:auto}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote,figure{margin:0 0 1rem}img{vertical-align:middle}[role=button],a,area,button,input,label,select,summary,textarea{cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;caption-side:bottom}caption,th{text-align:left}dd,label{margin-bottom:.5rem}label{display:inline-block}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}.lead{font-size:1.25rem;font-weight:300}.small,small{font-size:80%;font-weight:400}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}.figure-caption{font-size:90%;color:#636c72}code,pre{font-size:90%}code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code,pre code{padding:0;color:inherit;background-color:inherit}pre{display:block;margin-top:0;margin-bottom:1rem;color:#292b2c}pre code{font-size:inherit;background-color:transparent;border-radius:0}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto{-webkit-box-flex:0}.col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (min-width:576px){.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-sm-3,.col-sm-4,.col-sm-6,.col-sm-8{-webkit-box-flex:0}.col-sm-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-group{margin-bottom:1rem}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn:disabled{cursor:not-allowed;opacity:.65}.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}.collapsing{height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-item{padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav,.navbar-nav .row{list-style:none}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md,.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md,.navbar-toggleable-md>.container{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse,.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar-toggleable-md .navbar-collapse{width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, .5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.alert,.pagination{border-radius:.25rem}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.modal-open,.model{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}}.clearfix:after{display:block;content:"";clear:both}.justify-content-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (min-width:992px){.float-lg-left{float:left}.float-lg-right{float:right}.float-lg-none{float:none}}.mr-2{margin-right:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.p-0{padding:0}.pt-3{padding-top:1rem}.ml-auto{margin-left:auto}.pr-lg-3{padding-right:1rem}.text-center{text-align:center}body,pre{font-display:swap}body{font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,sans-serif;overflow-x:hidden}.mainheading{padding:0 0 1rem}a{color:#6fd350}a,a:hover{transition:all .2s}pre{-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 1.75em;border:1px solid #e3edf3;width:100%;padding:10px;font-size:14px;white-space:pre;overflow:auto;background:#f7fafb;border-radius:3px;line-height:1.3}.mediumnavigation{background:#fff;transition:top .5s ease-in-out;padding:1.5rem 1rem;box-shadow:0 10px 40px 0 rgba(0,0,0,.05)}.navbar-toggler-right{position:absolute;right:-2%;top:0}.nav-up{box-shadow:none}.site-content{padding-top:2rem;margin-top:57px;transition:all .4s}section{margin-bottom:20px}section.featured-posts{margin-bottom:30px}section.recent-posts{margin-bottom:0}.section-title h2{font-weight:700;font-size:1.4rem;margin-bottom:27px;position:relative}.section-title h2:before{margin-bottom:0;position:absolute;z-index:1;left:15px;right:0;top:12px;height:1px;content:"";background-color:#f5f5f5}.section-title span{background-color:#fff;position:relative;z-index:2;display:inline-block;padding:0 15px 0 0;font-size:14px;text-transform:uppercase;letter-spacing:1px}.layout-page .section-title span{font-size:2rem;text-transform:none;letter-spacing:0}.layout-page .section-title h2:before{top:17px}.article-post ol,.article-post ul{margin-bottom:1.5rem}.prevnextlinks .thepostlink{padding:20px 0;font-size:17px;display:block;color:#111;font-weight:500}.prevnextlinks{border-top:1px solid #eee;border-bottom:1px solid #eee;margin-left:0;margin-right:0}.prevnextlinks .rightborder{border-right:1px solid #eee}.navbar-toggleable-md .navbar-nav .nav-link.highlight{background:#6fd350;color:#fff;border-radius:4px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);padding-left:1em;padding-right:1em}.navbar-toggler{z-index:9999}.navbar-toggleable-md .navbar-nav .nav-link{color:#333;font-size:.94em;font-weight:500;letter-spacing:1px;margin-left:0;margin-top:10px;text-transform:uppercase}.mediumnavigation .dropdown-menu{margin:0 0 15px;box-shadow:none;border:0}.card-columns .card{margin-bottom:20px}.listfeaturedtag .wrapmeta,.listfeaturedtag .wrapthumbnail{position:relative;width:100%;min-height:1px;max-width:100%;-webkit-box-flex:0;-webkit-flex:100%;-ms-flex:100%;flex:100%}.listfeaturedtag .wrapthumbnail{padding:0 15px}.listfeaturedtag .wrapmeta{padding:0}.listfeaturedtag .wrapthumbnail{height:250px}.listfeaturedtag .card{border:0;border-radius:2px;height:calc(100% - 15px);padding-left:0;margin-bottom:15px;box-shadow:1px 2px 14px 0 rgba(0,0,0,.2)}.listfeaturedtag .card-block{padding:20px 20px 50px}.listfeaturedtag .thumbnail{background-size:cover;height:100%;display:block;background-position:38% 22%;background-origin:border-box;border-top-left-radius:2px}.listfeaturedtag .card-title,.listrecent .card-title{font-size:1.3rem;font-weight:500;line-height:1.25}.listfeaturedtag .card-title a,.listrecent .card-title a{color:#111;font-weight:500}.listfeaturedtag .card-title a:hover,.listrecent .card-title a:hover{color:rgba(0,0,0,.6);text-decoration:none}.card-text{color:#666;font-size:.95rem;line-height:1.8;font-weight:400}.listfeaturedtag .wrapfooter{position:absolute;font-size:12px;display:block;width:100%;left:0;right:0;bottom:-15px;margin:auto;padding:0 20px}.listrecent{width:100%}.listrecent .wrapfooter{font-size:12px;margin-top:30px}.author-thumb{width:40px;height:40px;float:left;margin-right:13px;border-radius:100%}.intro h2,.post-top-meta{margin-bottom:1rem;margin-top:3rem}.post-top-meta span{font-size:.9rem;color:rgba(0,0,0,.44)}.post-top-meta .author-thumb{width:72px;height:72px}.post-top-meta.authorpage .author-thumb{margin-top:40px}.post-top-meta .author-description{margin-bottom:5px;margin-top:10px;font-size:.95rem}.author-meta{flex:1 1 auto;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.alertbar form,.bottompagination span.navigation i,.post-top-meta span,.share ul li,div.post-date,span.author-meta,span.post-name{display:inline-block}div.post-date,span.post-read{color:#75748a;margin:7px 0}.share ul li i.fa,span.post-read-more a{width:30px;height:30px;line-height:30px;text-align:center;border-radius:50%}span.post-read-more a{color:#75748a;align-items:center;float:right;border:1px solid #d0d0d0}span.post-name a,span.post-read-more a:hover{color:rgba(0,0,0,.8)}.dot:after{content:"\00b7";margin-left:3px;margin-right:3px}.mainheading h1.sitetitle{font-family:Georgia,Times New Roman,Times,serif;font-display:swap}.mainheading h1.posttitle{font-weight:700;font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif}.intro{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/head.svg);background-size:contain;margin-top:-87px;margin-bottom:3.5rem;padding:3rem 0;position:relative;z-index:1}.intro .btn{background:#fff100;border:0;color:#333;border-radius:3px;font-weight:500;padding:15px 40px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);text-transform:uppercase;font-size:13px;letter-spacing:1px}.intro h1{font-weight:700}.intro h2{margin-top:1rem;color:#888;line-height:1.6}.wrapintro{background:rgba(211,201,255,.871);max-width:90%;width:700px;margin:0 auto;padding:2rem 1rem;text-align:center}.article-post,.link-dark{color:rgba(0,0,0,.8)}.article-post{font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif;font-size:1.1rem;line-height:1.8}.article-post a{color:inherit;text-decoration:none;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a:hover{box-shadow:inset 0 -30px 0 #ffe51f,0 2px 0 #ffe51f;text-decoration:none}blockquote{border-left:4px solid #6fd350;padding:0 20px;font-style:italic;color:rgba(0,0,0,.5)}.article-post blockquote,.article-post p{margin:0 0 1.5rem}.featured-image{display:block;margin-bottom:2rem}.featured-image[fallback]{margin-bottom:0}.article-post amp-iframe,.article-post amp-img,.featured-image{box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.article-post p iframe{margin-bottom:.5rem}.share{text-align:center;display:none}.share p{margin-bottom:10px;font-size:.95rem}.share ul li{margin-bottom:9px}.share ul{padding-left:0;margin-left:0}.share ul li i.fa{border:1px solid #ddd}.svgIcon{vertical-align:middle}.full-width{width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.share,.share a{color:rgba(0,0,0,.44);fill:rgba(0,0,0,.44)}.graybg{background-color:#fafafa;padding:40px 0 46px;position:relative}.listrecent .card{border-radius:4px;margin-bottom:30px;box-shadow:0 0 1px 0 rgba(0,0,0,.14);border:0}.card .img-thumb{border-top-right-radius:4px;border-top-left-radius:4px}.margtop3rem{margin-top:3rem}.sep{height:1px;width:20px;background:#999;margin:0 auto 1.2rem}.btn,.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:15px}.btn{box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-weight:500;cursor:pointer}.btn,a.btn{color:#fff}.btn-group-lg>.btn,.btn-lg{padding:1rem 2rem}.btn-primary{background-color:#675bff;border-color:#483aff}.btn-primary:hover{background-color:#483aff;border-color:#372cd8}.btn.follow{border-color:#6fd350;color:#6fd350;padding:3px 10px;text-align:center;border-radius:999em;font-size:.85rem;display:inline-block;box-shadow:none;font-weight:400}.btn.subscribe{border-color:#1c9963;border-radius:30px;margin-left:10px;text-transform:uppercase}.post-top-meta .btn.follow{margin-left:5px;margin-top:-4px}.alertbar{box-shadow:0 -3px 10px 0 rgba(0,0,0,.0785);position:fixed;bottom:0;left:0;background-color:#fff;width:100%;padding:14px 0;z-index:1;display:none}.alertbar input[type=email]{font-size:.85rem;padding:3px 5px 3px 10px;border-top-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #ddd;border-right:0;margin-right:-10px;height:34px;letter-spacing:.5px;margin-left:5px}.alertbar input[type=submit],.btn.subscribe{background-color:#1c9963;color:#fff;fill:#fff;font-size:.85rem;font-weight:600}.alertbar input[type=submit]{border:1px solid #1c9963;border-radius:0;padding:4px 10px;border-top-right-radius:3px;border-bottom-right-radius:3px;height:34px;letter-spacing:.5px;cursor:pointer}.form-control::-webkit-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5)}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control{border:1px solid #eee;border-radius:0}.authorpage h1{font-weight:700;font-size:30px}.post-top-meta.authorpage .author-thumb{float:none}.authorpage .author-description{font-size:1rem;color:rgba(0,0,0,.6)}.post-top-meta.authorpage,.sociallinks a,span.navigation{text-align:center}.post-top-meta.authorpage .btn.follow{padding:7px 20px;margin-top:10px;margin-left:0;font-size:.9rem}.graybg.authorpage{border-top:1px solid #f0f0f0}.authorpostbox{width:760px;margin:0 auto 1.5rem;max-width:100%}.authorpostbox .img-thumb{width:100%}.sociallinks{margin:1rem 0}.sociallinks a{background:#666;color:#fff;width:22px;height:22px;display:inline-block;line-height:22px;border-radius:50%;font-size:12px}#comments{margin-top:3rem;margin-bottom:1.5rem}#mc_embed_signup .mc-field-group input{text-indent:5%}#mc_embed_signup{font-family:inherit}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.4;margin-top:0;margin-bottom:.5rem}.article-post h1,.article-post h2,.article-post h3,.article-post h4,.article-post h5,.article-post h6{margin-top:2rem;margin-bottom:1rem}.article-post img.shadow{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.3);-moz-box-shadow:0 0 10px 0 rgba(0,0,0,.3);box-shadow:0 0 10px 0 rgba(0,0,0,.3)}img{height:auto}.bottompagination span.navigation a{background:#fff100;color:#333;padding:5px;border-radius:3px;text-transform:none;font-weight:500;letter-spacing:0;min-width:100px;display:inline-block}.pointerup{margin-bottom:-18px;margin-left:49%;font-size:30px}.pointerup i.fa{color:#eaeaea}span.navigation{display:block;font-size:.93rem;font-weight:700;position:relative}span.navigation:before{margin-bottom:0;position:absolute;z-index:1;left:0;right:0;top:12px;height:1px;content:"";background-color:#eee}.pagination{display:inline-block;background:#fff;z-index:1;position:relative;padding:0 20px;font-size:13px;letter-spacing:.5px;font-weight:500;text-transform:uppercase}iframe,img{max-width:100%}.mediumnavigation .form-control{font-size:.8rem;border-radius:30px;overflow:hidden;border:1px solid rgba(0,0,0,.04)}.mediumnavigation .form-inline{margin-left:15px}.mediumnavigation .form-inline .btn{margin-left:-50px;border:0;border-radius:30px;cursor:pointer}.mediumnavigation .form-inline .btn:active,.mediumnavigation .form-inline .btn:hover{background:0 0;color:green}.mediumnavigation .navbar-brand{font-weight:500;padding:0}.dropdown-item{display:block;width:100%;padding:7px 1.5rem}.dropdown-menu,.mediumnavigation .nav-item{font-size:.9rem}.dropdown-menu{display:none;overflow:auto;z-index:1}.dropdown-toggle:focus~.dropdown-menu,.dropdown:hover .dropdown-menu{display:block}.dropdown:focus-within .dropdown-menu{display:block}.mediumnavigation .search-icon{margin-left:-40px;display:inline-block;margin-top:3px;cursor:pointer}.mediumnavigation .navbar-brand img{margin-right:7px;vertical-align:text-bottom;max-width:none}.navbar-collapse{border-top:1px solid #ddd}.navbar-btngroup{flex-wrap:nowrap;justify-content:right;list-style:none;margin-bottom:0;padding-left:0}.navbar-btngroup .btn{margin-left:.5rem}.navbar-nav{max-height:60vh;overflow:auto}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;overflow:hidden}.fixed-top:focus,.fixed-top:hover{overflow-x:visible;overflow-y:visible}.fixed-top:focus-within{overflow-x:visible;overflow-y:visible}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:#eee;border-radius:0 3px 3px 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#888}.searchbox{display:inline;width:calc(100% - 86px)}:root{--space-2:1rem;--space-3:1.5rem}#consent-ui,#consent-ui .container{background:#fff;font-size:.9rem;transition:right .3s ease}#consent-ui h2{display:flex;align-items:center;color:#675bff;font-size:1.6rem;column-gap:.9rem}#consent-ui .description{margin:.6rem auto .9rem}#consent-ui .description p{color:#333}#consent-ui a{color:#675bff}#consent-ui a:hover{color:#483aff;text-decoration:underline}#consent-ui .buttons{max-width:100%;width:300px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.6rem}#consent-ui .button{background-color:#fff;color:#483aff;padding:8px 16px;border:2px solid #675bff;border-radius:4px;cursor:pointer;min-width:max(140px,calc(100% / 2 - 10px));transition:all .2s ease}#consent-ui .button:hover{background-color:#483aff;color:#fff}#consent-ui .button.fill{border:none;background:#675bff;color:#fff}#consent-ui .button.fill:hover{background-color:#483aff}#cookie-consent-banner{padding:.9rem 1.5rem .1rem;display:flex;flex-wrap:wrap;justify-content:space-evenly;column-gap:.9rem}#cookie-consent-banner header{max-width:768px;min-width:min(375px,100%);width:calc(100% - 320px)}#cookie-consent-banner h2{font-size:1.25rem;column-gap:.5rem}#cookie-preference-modal{position:fixed;top:50%;left:50%;max-width:345px;width:100%;border-radius:8px;padding:1.25rem 1.5rem 1.75rem;transform:translate(-50%,-50%);box-shadow:0 5px 10px rgba(0,0,0,.1)}#consent-choices{margin:1rem;display:flex;flex-direction:column}.consentLabel input{margin:.5rem}#post-consent-ui{position:fixed;bottom:50px;left:20px;z-index:99}#post-consent-ui button{border-radius:50%;font-size:1.66rem;width:3rem;height:3rem;padding:0;border:3px solid #483aff}.invitation-codes a{background:linear-gradient(139deg,#ffc92f,#ff185c,#f316d5,#b81ed2);font-family:Arial,Helvetica,sans-serif;font-size:16px;color:#fff;font-weight:700;border-radius:5px;padding:0 10px;height:36px;display:inline-block}.invitation-codes svg{float:left;vertical-align:middle;display:inline;margin-right:4.5px;margin-left:4.5px;padding-top:7px;height:28px}.invitation-codes span{padding:0 12px;vertical-align:middle;float:left;line-height:34px}amp-ad{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png);background-position:50%;background-repeat:no-repeat;background-size:50px}.article-post .anchor-link{visibility:hidden;box-shadow:none;color:#daa520;font-size:1rem;margin-left:.5rem;vertical-align:super}.article-post .anchor-link:hover{box-shadow:none}.anchor-link:focus,.article-post :hover>.anchor-link{visibility:visible}amp-img[aria-label=lightbox]{cursor:zoom-in}amp-image-lightbox img{object-fit:scale-down}amp-image-lightbox button:last-of-type{cursor:zoom-out;min-width:100%;min-height:100%}amp-image-viewer img{max-width:fit-content;transition:width .25s linear}amp-lightbox{background-color:rgba(0,0,0,.6);z-index:1050}a.vglnk{border-bottom:2px dashed grey;box-shadow:unset}.shadow-none,figure.shadow-none *{box-shadow:none}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.7rem}h4{font-size:1.48rem}h5{font-size:1.3rem}h6{font-size:1.25rem}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 2px 0 0 hsla(0,0%,100%,.7);display:inline-block;font-size:.85em;line-height:1;padding:2px 4px;white-space:nowrap}.article-post h2:not(:first-of-type){margin-top:5rem}.article-post del{color:#999;text-decoration-color:#f05f70}.article-post del a{box-shadow:none;border-bottom:1px solid #ddd;text-decoration:inherit}.article-post .box-highlight{box-shadow:1px 2px 15px #675bff}.article-post figcaption{font-size:smaller}.article-post a>code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a.citation,.article-post a.footnote,.article-post a.reversefootnote{box-shadow:none;background-color:#ffe51f}.card .row,.card>a{height:100%}.container{width:96%;max-width:100%}.inline-fix+*{display:inline}.inline-fix+*+.badge{vertical-align:text-top}.listfeaturedtag .card .thumbnail img{width:500px;height:258px}.listfeaturedtag .card-list{width:100%}.listfeaturedtag .card-list .thumbnail img{width:500px;height:150px;object-fit:cover}.listfeaturedtag .card-list .card-title{font-size:1rem}.listfeaturedtag .card-list .wrapthumbnail{height:150px}.mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.thumbnail.fit-left img{object-position:left}.thumbnail.fit-right img{object-position:right}.screen-reader-only{position:absolute;left:-5000px}.screen-reader-only:focus{left:0}.left-sidebar{order:1}.sidebar{font-size:15px;max-width:100%}.sidebar h3,.sidebar h3 span{text-align:center;position:relative}.sidebar h3{font-size:1.3rem;margin-bottom:1rem;font-weight:700}.sidebar h3 span{background-color:#fff;z-index:2;display:inline-block;padding:0 15px;font-size:14px;text-transform:uppercase;letter-spacing:1px}.sidebar h3:before{margin-bottom:0;position:absolute;z-index:1;left:0;top:12px;width:100%;height:1px;content:"";background-color:#333}.sidebar ul{list-style:none;padding-left:0}.sidebar li a{color:#999;border-bottom:1px solid #f6f6f6;display:block;padding-bottom:10px;padding-top:10px}.sidebar-section{margin-bottom:2rem;padding:30px 10px 30px 20px;box-shadow:0 0 1px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup form{padding:0}.sidebar #mc_embed_signup .button{width:100%;background:#675bff;height:auto;padding:6px 20px;font-weight:600;box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup h2{font-weight:400;font-size:15px;color:#999;margin-bottom:1rem;line-height:1.5;text-align:center}.sidebar #mc_embed_signup .mc-field-group,.sidebar #mc_embed_signup input{width:100%}.tags{list-style:none;padding-left:0;margin:0 0 1.5rem}.tags li{display:inline-block;font-size:.9rem;margin-right:.2rem}.tags li:last-child{margin-right:0}.tags li a{background:#fff100;color:#333;padding:3px 10px;border-radius:3px;font-weight:500;font-size:.93em;text-transform:capitalize;text-decoration:none;box-shadow:0 6px 10px 0 hsla(0,0%,65.9%,.1)}.tags li a:hover{background:rgba(0,0,0,.07);text-decoration:none}.tags.rounded-tags li a{background:0 0;border:1px solid;border-radius:20px}.tags.rounded-tags code a{box-shadow:inherit}.beforefooter{background:linear-gradient(rgba(255,241,0,.8),rgba(255,241,0,.8)),url(https://chriskyfung.github.io/images/header-bg.jpg);background-size:contain;background-position-x:center;background-blend-mode:overlay;color:#111;max-width:100%;margin:50px auto -50px;padding:50px 0;text-align:center}@supports (background-blend-mode:overlay){.beforefooter{background-color:#fff100;background-image:url(https://chriskyfung.github.io/images/header-bg.jpg);background-blend-mode:overlay}}.beforefooter h3{margin-bottom:1rem}.footer{background-color:#171e27;border-top:1px solid rgba(0,0,0,.05);color:#999;margin-top:50px;margin-bottom:0;padding:30px 0;text-align:center}.footer a{color:inherit}.footer a:hover{color:#fff;text-decoration:none}.footer amp-ad{max-width:1140px;margin:auto}.footer-bar{padding-top:1.5rem;font-size:.9em}.footer-bar a{color:#eee}.footer .textwidget a{border-bottom:1px dashed}.footer-widget{font-size:15px;margin-top:1rem;margin-bottom:1rem}.footer-widget .title{font-size:18px;text-transform:uppercase;letter-spacing:1px;color:#fff;margin-bottom:1.5rem}.footer-widget ul{list-style:none;padding-left:0}.footer-widget li{margin:12px 0}.footer-widget .recent-posts img{float:left;margin-right:10px}.footer-widget-blob{background:#e9e4ff;border-radius:60% 70% 500% 70%}.footer-widget-image-wrapper{display:block;margin:auto;max-width:350px}.footersocial h3{font-size:1.48rem}.footersocial .fab{width:40px;height:40px;line-height:40px;text-align:center;display:inline-block;background:#fff;border-radius:3px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-size:18px;margin-left:5px;color:#3c3838;margin-top:10px}.bmc-button img{height:34px;width:35px;margin-bottom:1px;box-shadow:none;border:0;vertical-align:middle}.bmc-button{line-height:35px;height:51px;display:inline-flex;background-color:#ff813f;border-radius:5px;border:1px solid transparent;padding:7px 15px 7px 10px;font-size:28px;letter-spacing:.6px;box-shadow:0 1px 2px hsla(0,0%,74.9%,.5);margin:0 auto;font-family:Cookie,cursive;-webkit-box-sizing:border-box;box-sizing:border-box}.bmc-button,.bmc-button:active,.bmc-button:focus,.bmc-button:hover{text-decoration:none;color:#fff;-webkit-box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5)}.bmc-button:active,.bmc-button:focus,.bmc-button:hover{box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5);opacity:.85}@media (min-width:576px){.beforefooter{text-align:left}.bmc-button{font-size:16.5px}.card-columns.listfeaturedtag{-webkit-column-count:2;-moz-column-count:2;column-count:2}.footer{text-align:left}.footer-widget{margin-bottom:3rem;margin-top:3rem}.left-sidebar{order:-1}.listfeaturedtag .card .thumbnail img{left:-50%;max-width:500px;overflow-x:hidden}.listfeaturedtag .card-list .thumbnail img{width:291px}.sidebar{max-width:340px}}@media (min-width:768px){.bmc-button{font-size:28px}.listfeaturedtag .card .thumbnail img{left:-25%}.post-top-meta.authorpage{text-align:left}}@media (min-width:992px){.intro{padding:9rem 0}.intro h2{margin-top:2rem;margin-bottom:2rem}.listfeaturedtag .card{height:260px}.listfeaturedtag .card .thumbnail img{left:-75%}.listfeaturedtag .card-list{height:auto}.listfeaturedtag .card-block{padding-left:0}.listfeaturedtag .wrapfooter{padding-left:0;right:auto}.listfeaturedtag .wrapmeta{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%;margin-left:-3px}.listfeaturedtag .wrapthumbnail{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;max-width:41.666667%;height:258px;flex:0 0 auto}.mediumnavigation .dropdown-menu{box-shadow:0 0 7px rgba(0,0,0,.2);max-height:60vh}.navbar-collapse{border:0}.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.5rem;margin-top:0}.navbar-nav{max-height:60vh;overflow:visible}.wrapintro{padding:3rem}}@media (min-width:1025px){.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.75rem}}@media (min-width:1200px){.container{width:1140px;max-width:100%}.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:1rem}}@supports (object-fit:cover){.listfeaturedtag .card .thumbnail img{left:inherit;max-width:inherit;object-fit:cover}}.gh-style.btn{position:relative;display:inline-block;padding:5px 16px;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;-webkit-appearance:none;appearance:none;color:#24292e;background-color:#fafbfc;border:1px solid rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25);transition:background-color .2s cubic-bezier(.3,0,.5,1)}.gh-style.btn:hover{text-decoration:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{cursor:default}.gh-style.btn.disabled .octicon,.gh-style.btn:disabled .octicon,.gh-style.btn[aria-disabled=true] .octicon{color:inherit}.gh-style.btn i{font-style:normal;font-weight:500;opacity:.75}.gh-style.btn .octicon{margin-right:4px;color:#6a737d;vertical-align:text-bottom}.gh-style.btn .octicon:only-child{margin-right:0}.gh-style.btn .Counter{margin-left:2px;color:inherit;text-shadow:none;vertical-align:top;background-color:rgba(27,31,35,.08)}.gh-style.btn .dropdown-caret{margin-left:4px;opacity:.8}.gh-style.btn.hover,.gh-style.btn:hover,[open]>.gh-style.btn{background-color:#f3f4f6;transition-duration:.1s}.gh-style.btn.selected,.gh-style.btn:active,.gh-style.btn[aria-selected=true]{background-color:#edeff2;box-shadow:inset 0 1px 0 rgba(225,228,232,.2);transition:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{color:#959da5;background-color:#fafbfc;border-color:rgba(27,31,35,.15)}.gh-style.btn.focus,.gh-style.btn:focus{outline:1px dotted transparent;outline-offset:2px;box-shadow:0 0 0 3px rgba(3,102,214,.3)}.gh-style.btn-primary{color:#fff;background-color:#2ea44f;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.hover,.gh-style.btn-primary:hover,[open]>.gh-style.btn-primary{background-color:#2c974b}.gh-style.btn-primary.selected,.gh-style.btn-primary:active,.gh-style.btn-primary[aria-selected=true]{background-color:#2a8f47;box-shadow:inset 0 1px 0 rgba(20,70,32,.2)}.gh-style.btn-primary.disabled,.gh-style.btn-primary:disabled,.gh-style.btn-primary[aria-disabled=true]{color:hsla(0,0%,100%,.8);background-color:#94d3a2;border-color:rgba(27,31,35,.1);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.focus,.gh-style.btn-primary:focus{box-shadow:0 0 0 3px rgba(46,164,79,.4)}.gh-style.btn-primary .Counter{color:inherit;background-color:hsla(0,0%,100%,.2)}.gh-style.btn-primary .octicon{color:hsla(0,0%,100%,.8)}.gh-style.btn-danger{color:#cb2431;transition:none}.gh-style.btn-danger:hover,[open]>.gh-style.btn-danger{color:#fff;background-color:#cb2431;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-danger:hover .Counter,[open]>.gh-style.btn-danger .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-danger:hover .octicon,[open]>.gh-style.btn-danger .octicon{color:inherit}.gh-style.btn-danger.selected,.gh-style.btn-danger:active,.gh-style.btn-danger[aria-selected=true]{color:#fff;background-color:#be222e;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(134,24,29,.2)}.gh-style.btn-danger.disabled,.gh-style.btn-danger:disabled,.gh-style.btn-danger[aria-disabled=true]{color:rgba(203,36,49,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-danger.disabled .Counter,.gh-style.btn-danger:disabled .Counter,.gh-style.btn-danger[aria-disabled=true] .Counter{background-color:rgba(203,36,49,.05)}.gh-style.btn-danger:focus{box-shadow:0 0 0 3px rgba(203,36,49,.4)}.gh-style.btn-danger .Counter{color:inherit;background-color:rgba(203,36,49,.1)}.gh-style.btn-outline{color:#0366d6;transition:none}.gh-style.btn-outline:hover,[open]>.gh-style.btn-outline{color:#fff;background-color:#0366d6;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-outline:hover .Counter,[open]>.gh-style.btn-outline .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-outline:hover .octicon,[open]>.gh-style.btn-outline .octicon{color:inherit}.gh-style.btn-outline.selected,.gh-style.btn-outline:active,.gh-style.btn-outline[aria-selected=true]{color:#fff;background-color:#035fc7;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(5,38,76,.2)}.gh-style.btn-outline.disabled,.gh-style.btn-outline:disabled,.gh-style.btn-outline[aria-disabled=true]{color:rgba(3,102,214,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-outline.disabled .Counter,.gh-style.btn-outline:disabled .Counter,.gh-style.btn-outline[aria-disabled=true] .Counter{background-color:rgba(3,102,214,.05)}.gh-style.btn-outline:focus{box-shadow:0 0 0 3px rgba(3,102,214,.4)}.gh-style.btn-outline .Counter{color:inherit;background-color:rgba(3,102,214,.1)}.gh-style.btn-blue{color:#fff;background-color:#0361cc;background-image:linear-gradient(-180deg,#0679fc,#0361cc 90%)}.gh-style.btn-blue.focus,.gh-style.btn-blue:focus{box-shadow:0 0 0 .2em rgba(6,121,252,.4)}.gh-style.btn-blue.hover,.gh-style.btn-blue:hover{background-color:#035cc2;background-image:linear-gradient(-180deg,#0374f4,#035cc2 90%);background-position:-.5em;border-color:rgba(27,31,35,.5)}.gh-style.btn-blue.selected,.gh-style.btn-blue:active,.gh-style.btn-blue[aria-selected=true],[open]>.gh-style.btn-blue{background-color:#045cc1;background-image:none;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15)}.gh-style.btn-blue.disabled,.gh-style.btn-blue:disabled,.gh-style.btn-blue[aria-disabled=true]{color:hsla(0,0%,100%,.75);background-color:#81b0e6;background-image:none;border-color:rgba(27,31,35,.15);box-shadow:none}.gh-style.btn-blue .Counter{color:#0366d6;background-color:#fff}.gh-style.btn-sm{padding:3px 12px;font-size:12px;line-height:20px}.gh-style.btn-sm .octicon{vertical-align:text-top}.gh-style.btn-large{padding:.75em 1.5em;font-size:inherit;line-height:1.5;border-radius:.5em}.gh-style.btn-block{display:block;width:100%;text-align:center}.gh-style.btnGroup{display:inline-block;vertical-align:middle}.gh-style.btnGroup:before{display:table;content:""}.gh-style.btnGroup:after{display:table;clear:both;content:""}.gh-style.btnGroup+.gh-style.btn,.gh-style.btnGroup+.gh-style.btnGroup{margin-left:4px}.gh-style.btnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.gh-style.btnGroup-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-item:last-child{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-item.selected,.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-item:hover,.gh-style.btnGroup-item[aria-selected=true]{border-right-width:1px}.gh-style.btnGroup-item.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-item.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-parent{float:left}.gh-style.btnGroup-parent:first-child .gh-style.btnGroup-item{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-parent:last-child .gh-style.btnGroup-item{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-right-width:0;border-radius:0}.gh-style.btnGroup-parent.selected .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true] .gh-style.btnGroup-item{border-right-width:1px}.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-parent:active,.gh-style.btnGroup-parent:focus{z-index:1}.gh-style.btn-link{display:inline-block;padding:0;font-size:inherit;color:#0366d6;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}.gh-style.btn-link:hover{text-decoration:underline}.gh-style.btn-link:disabled,.gh-style.btn-link:disabled:hover,.gh-style.btn-link[aria-disabled=true],.gh-style.btn-link[aria-disabled=true]:hover{color:rgba(88,96,105,.5);cursor:default}.gh-style.btn-invisible{color:#0366d6;background-color:transparent;border:0;border-radius:0;box-shadow:none}.gh-style.btn-invisible.selected,.gh-style.btn-invisible.zeroclipboard-is-active,.gh-style.btn-invisible.zeroclipboard-is-hover,.gh-style.btn-invisible:active,.gh-style.btn-invisible:focus,.gh-style.btn-invisible:hover,.gh-style.btn-invisible[aria-selected=true]{color:#0366d6;background:0 0;outline:0;box-shadow:none}.gh-style.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#586069;vertical-align:middle;background:0 0;border:0}.gh-style.btn-octicon:hover{color:#0366d6}.gh-style.btn-octicon.disabled,.gh-style.btn-octicon[aria-disabled=true]{color:#959da5;cursor:default}.gh-style.btn-octicon.disabled:hover,.gh-style.btn-octicon[aria-disabled=true]:hover{color:#959da5}.gh-style.btn-octicon-danger:hover{color:#cb2431}.gh-style.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.gh-style.btn-with-count:focus{z-index:1}.gh-style.btn:focus .icon-sponsor,.gh-style.btn:focus .icon-sponsoring,.gh-style.btn:hover .icon-sponsor,.gh-style.btn:hover .icon-sponsoring,.Label:focus .icon-sponsor,.Label:focus .icon-sponsoring,.Label:hover .icon-sponsor,.Label:hover .icon-sponsoring{transform:scale(1.1)}.icon-sponsor{overflow:visible}.gh-style{position:fixed;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.5}.octicon{display:inline-block;overflow:visible;vertical-align:text-bottom;fill:currentColor}</style><meta name="amp-script-src" content="sha384-n2-YMnb2FkeDk-Ca2pVnoYSR2FqNKqKgTwfK_UI0EAeVRCAHgCDjsecHJpVMv3Sl"></head><body class="layout-archive" data-amp-auto-lightbox-disable> +<amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> +</amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> +</div> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> +</li></ul> +<ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> +<section class="row recent-posts"> <div class="section-title"> <h1><span>tag 'Bash'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +</div> +</div> </section> </main> <aside class="col-md-4 col-lg-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.jpg" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform">Learning Google Cloud Platform on Qwiklabs: Learning Map, Assisti...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-06-20T23:36:00+08:00" itemprop="dateModified" title="Updated on">20 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Bash" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> +</div> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> +<p>See anything that can be improved?</p> +<p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> +<a class="btn btn-primary btn-lg" href="/contact">Contact Me</a> </div> <div class="col-md-4 text-center footersocial"> <div class="mb-4"> <h3>Support Me</h3> +<a class="bmc-button" href="https://www.buymeacoffee.com/chriskyfung" data-vars-event-label="Buy me a coffee Badge"> <amp-img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" width="35" height="34" layout="fixed" alt aria-hidden="true" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:35px;height:34px;" i-amphtml-layout="fixed"></amp-img> <span style="margin-left:5px;">Buy me a coffee</span> +</a> </div> <div> <h3>Follow Me on</h3><a href="https://www.facebook.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-facebook" aria-hidden="true"></i><span class="sr-only">Facebook</span></a><a href="https://www.pinterest.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-pinterest"></i><span class="sr-only">Pinterest</span></a><a href="https://github.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-github"></i><span class="sr-only">GitHub</span></a><a href="https://medium.com/@chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-medium"></i><span class="sr-only">Medium</span></a> </div> </div> </div> </div> </section> <section class="footer"> <div class="container"> <div class="row"> <div class="col-sm-3"> <div class="footer-widget"> <div class="footer-widget-blob footer-widget-image-wrapper"> <amp-img class="pr-lg-3 i-amphtml-layout-responsive i-amphtml-layout-size-defined" src="/assets/images/knowledge__flatline.svg" height="179" width="255" layout="responsive" alt="ideas and knowledge" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:70.1961%"></i-amphtml-sizer></amp-img> +</div> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title">Disclosures</h3> + +<div id="copyscape-banner"> <a href="https://www.copyscape.com/" data-vars-event-label="Copyscape Badge" aria-label="Copyscape - link opens in a new tab" rel="noopener noreferrer" target="_blank"> <amp-img src="https://banners.copyscape.com/img/copyscape-banner-white-130x46.png" width="130" height="46" alt="© Protected by Copyscape" title="Opens in New Tab" style="width:130px;height:46px;width:130px;height:46px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> </amp-img> </a> +</div> </div> </div> </div> <div class="footer-bar"> <p class="float-lg-left"> Copyright © 2014-2024 <a href="https://chriskyfung.github.io/">Chris KY FUNG</a>. All rights reserved. </p> <p class="float-lg-right">Powered by <a aria-label="theme credit" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/" rel="noopener noreferrer">AMP Affiliately Theme</a> | <a aria-label="privacy policy" href="/privacy-policy">Privacy Policy</a> </p> <div class="clearfix"></div> </div> </div> </section></footer> </div> <amp-image-lightbox id="lightbox1" layout="nodisplay" data-close-button-aria-label="Close" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"></amp-image-lightbox> </body></html> \ No newline at end of file diff --git a/tag/bigquery/index.html b/tag/bigquery/index.html index 48c9a3785..b3af981b4 100644 --- a/tag/bigquery/index.html +++ b/tag/bigquery/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -31,19 +31,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in BigQuery" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/changelog/index.html b/tag/changelog/index.html index f06ba1fd0..0ddba8a34 100644 --- a/tag/changelog/index.html +++ b/tag/changelog/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -31,19 +31,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Changelog" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/cloud-ai/index.html b/tag/cloud-ai/index.html index 4309e6691..bcc59c60e 100644 --- a/tag/cloud-ai/index.html +++ b/tag/cloud-ai/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Cloud AI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/cloud-function/index.html b/tag/cloud-function/index.html index 3cbafceb3..f78d2d274 100644 --- a/tag/cloud-function/index.html +++ b/tag/cloud-function/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Cloud Function" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/command-line/index.html b/tag/command-line/index.html index 38bc86fb2..2a5f0383d 100644 --- a/tag/command-line/index.html +++ b/tag/command-line/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -13,7 +13,9 @@ </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> </div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> -<section class="row recent-posts"> <div class="section-title"> <h1><span>tag 'Command-line'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for Tip for scri..." i-amphtml-ssr data-hero class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"><img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Tip for scri..." src="/assets/images/write-2160925.svg"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" rel="bookmark">Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables</a></h3> <p class="card-text">In a molecular dynamics study, simulation is often repeated with different sets of parameters, e.g. dimensions, velocity, initial pressure and temperature. If the parameters are defined as variables in the...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/lammps/">LAMMPS</a></small> </li><li> <small><a href="/tag/linux/">Linux</a></small> </li><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2014-07-12T00:00:00+08:00" itemprop="datePublished" title="Published on">12 Jul 2014</time></div> <span class="post-read-more"><a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +<section class="row recent-posts"> <div class="section-title"> <h1><span>tag 'Command-line'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +</div> +<div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" aria-hidden="true" tabindex="-1"><figure><amp-img width="auto" height="197" layout="fixed-height" src="/assets/images/write-2160925.svg" alt="thumbnail for Tip for scri..." class="i-amphtml-layout-fixed-height i-amphtml-layout-size-defined" style="height:197px;" i-amphtml-layout="fixed-height"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" rel="bookmark">Tip for scripting LAMMPS: Create And Rename A Folder Based On The Input Variables</a></h3> <p class="card-text">In a molecular dynamics study, simulation is often repeated with different sets of parameters, e.g. dimensions, velocity, initial pressure and temperature. If the parameters are defined as variables in the...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/lammps/">LAMMPS</a></small> </li><li> <small><a href="/tag/linux/">Linux</a></small> </li><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2014-07-12T00:00:00+08:00" itemprop="datePublished" title="Published on">12 Jul 2014</time></div> <span class="post-read-more"><a href="/blog/2014/07/12/Tip-for-scripting-LAMMPS-Create-And-Rename-A-Folder-Based-On-The-Input-Variables" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> </div> <div class="col-md-6 grid-item"> <article class="card"> <a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" aria-hidden="true" tabindex="-1"><figure><amp-img width="620" height="158" layout="intrinsic" src="/images/posts/lammps/lammps_send_email_transparent.webp" alt="thumbnail for How to Send ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OCIgd2lkdGg9IjYyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="620" height="158" layout="intrinsic" src="/images/posts/lammps/lammps_send_email_transparent.png" alt="thumbnail for How to Send ..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1OCIgd2lkdGg9IjYyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" rel="bookmark">How to Send a Notification from a LAMMPS Simulation to Your Email</a></h3> <p class="card-text">Molecular dynamics simulations often take long computational times, from several hours to a few days. It is a boring job to monitor the progress of simulations. Very often, we switch...</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/email/">Email</a></small> </li><li> <small><a href="/tag/lammps/">LAMMPS</a></small> </li><li> <small><a href="/tag/molecular-dynamics/">Molecular dynamics</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2014-06-13T00:00:00+08:00" itemprop="datePublished" title="Published on">13 Jun 2014</time></div> <span class="post-read-more"><a href="/blog/2014/06/13/How-to-Send-a-Notification-from-a-LAMMPS-Simulation-to-Your-Email" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> </div> @@ -25,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Command-line" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/computer-science/index.html b/tag/computer-science/index.html index 977840eb3..420a41250 100644 --- a/tag/computer-science/index.html +++ b/tag/computer-science/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Computer Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/conference-paper/index.html b/tag/conference-paper/index.html index e36a69b8d..61a588c90 100644 --- a/tag/conference-paper/index.html +++ b/tag/conference-paper/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Conference paper" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/conference/index.html b/tag/conference/index.html index 0ac410ddd..58eb23231 100644 --- a/tag/conference/index.html +++ b/tag/conference/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Conference" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/custom-theme/index.html b/tag/custom-theme/index.html index 9de098153..baff830eb 100644 --- a/tag/custom-theme/index.html +++ b/tag/custom-theme/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Custom Theme" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/data-science/index.html b/tag/data-science/index.html index 831606187..26c59b0cb 100644 --- a/tag/data-science/index.html +++ b/tag/data-science/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -40,19 +40,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Data Science" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/docker/index.html b/tag/docker/index.html index c0997008c..14cd1e2fa 100644 --- a/tag/docker/index.html +++ b/tag/docker/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Docker" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/email/index.html b/tag/email/index.html index b94fb1e8e..dfa103206 100644 --- a/tag/email/index.html +++ b/tag/email/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Email" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/file-i-o/index.html b/tag/file-i-o/index.html index 516384368..d135fd6a6 100644 --- a/tag/file-i-o/index.html +++ b/tag/file-i-o/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in File I/O" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/fuzzy-logic/index.html b/tag/fuzzy-logic/index.html index 18aaebdea..ceb40cc9b 100644 --- a/tag/fuzzy-logic/index.html +++ b/tag/fuzzy-logic/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Fuzzy Logic" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/gcloud/index.html b/tag/gcloud/index.html index 7a50f6808..18f182cfe 100644 --- a/tag/gcloud/index.html +++ b/tag/gcloud/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in GCLOUD" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/github-cli/index.html b/tag/github-cli/index.html new file mode 100644 index 000000000..6dd46dac6 --- /dev/null +++ b/tag/github-cli/index.html @@ -0,0 +1,49 @@ +<!DOCTYPE html><html amp lang="en" i-amphtml-binding i-amphtml-layout i-amphtml-no-boilerplate transformed="self;v=1"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="preload" href="/assets/images/logo-plainSVG.svg" as="image"><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://use.fontawesome.com/releases/v5.13.1/webfonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png" as="image"><meta name="generator" content="Jekyll v4.2.2"><meta property="og:title" content="GitHub CLI"><meta name="author" content="Chris KY Fung"><meta property="og:locale" content="en_US"><meta name="description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:description" content="Feel free to bookmark this to keep an eye on my project updates"><meta property="og:url" content="https://chriskyfung.github.io/tag/github-cli/"><meta property="og:site_name" content="Chris KY FUNG’s Blog"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><meta property="twitter:title" content="GitHub CLI"><meta name="google-site-verification" content="WvB_kR1tvqtLYj1YxGXkQp6X-ue8FgK5kfQOB2K8cZA"><style amp-runtime i-amphtml-version="012410292120000">html{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch-action:pan-y pinch-zoom;touch-action:pan-y pinch-zoom}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not(.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important}html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling:touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px solid transparent!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox-element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram{padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions-dialog],body:not(.i-amphtml-subs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display:none}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list[load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load-more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px!important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-color:#000!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtml-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important}amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,.33)}.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden}amp-script[nodom],amp-script[sandboxed]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden} +/*# sourceURL=/css/ampdoc.css*/[hidden]{display:none!important}.i-amphtml-element{display:inline-block}.i-amphtml-blurry-placeholder{transition:opacity 0.3s cubic-bezier(0.0,0.0,0.2,1)!important;pointer-events:none}[layout=nodisplay]:not(.i-amphtml-element){display:none!important}.i-amphtml-layout-fixed,[layout=fixed][width][height]:not(.i-amphtml-layout-fixed){display:inline-block;position:relative}.i-amphtml-layout-responsive,[layout=responsive][width][height]:not(.i-amphtml-layout-responsive),[width][height][heights]:not([layout]):not(.i-amphtml-layout-responsive),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-layout-responsive){display:block;position:relative}.i-amphtml-layout-intrinsic,[layout=intrinsic][width][height]:not(.i-amphtml-layout-intrinsic){display:inline-block;position:relative;max-width:100%}.i-amphtml-layout-intrinsic .i-amphtml-sizer{max-width:100%}.i-amphtml-intrinsic-sizer{max-width:100%;display:block!important}.i-amphtml-layout-container,.i-amphtml-layout-fixed-height,[layout=container],[layout=fixed-height][height]:not(.i-amphtml-layout-fixed-height){display:block;position:relative}.i-amphtml-layout-fill,.i-amphtml-layout-fill.i-amphtml-notbuilt,[layout=fill]:not(.i-amphtml-layout-fill),body noscript>*{display:block;overflow:hidden!important;position:absolute;top:0;left:0;bottom:0;right:0}body noscript>*{position:absolute!important;width:100%;height:100%;z-index:2}body noscript{display:inline!important}.i-amphtml-layout-flex-item,[layout=flex-item]:not(.i-amphtml-layout-flex-item){display:block;position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.i-amphtml-layout-fluid{position:relative}.i-amphtml-layout-size-defined{overflow:hidden!important}.i-amphtml-layout-awaiting-size{position:absolute!important;top:auto!important;bottom:auto!important}i-amphtml-sizer{display:block!important}@supports (aspect-ratio:1/1){i-amphtml-sizer.i-amphtml-disable-ar{display:none!important}}.i-amphtml-blurry-placeholder,.i-amphtml-fill-content{display:block;height:0;max-height:100%;max-width:100%;min-height:100%;min-width:100%;width:0;margin:auto}.i-amphtml-layout-size-defined .i-amphtml-fill-content{position:absolute;top:0;left:0;bottom:0;right:0}.i-amphtml-replaced-content,.i-amphtml-screen-reader{padding:0!important;border:none!important}.i-amphtml-screen-reader{position:fixed!important;top:0px!important;left:0px!important;width:4px!important;height:4px!important;opacity:0!important;overflow:hidden!important;margin:0!important;display:block!important;visibility:visible!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:8px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:12px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:16px!important}.i-amphtml-unresolved{position:relative;overflow:hidden!important}.i-amphtml-select-disabled{-webkit-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.i-amphtml-notbuilt,[layout]:not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){position:relative;overflow:hidden!important;color:transparent!important}.i-amphtml-notbuilt:not(.i-amphtml-layout-container)>*,[layout]:not([layout=container]):not(.i-amphtml-element)>*,[width][height][heights]:not([layout]):not(.i-amphtml-element)>*,[width][height][sizes]:not([layout]):not(.i-amphtml-element)>*{display:none}amp-img:not(.i-amphtml-element)[i-amphtml-ssr]>img.i-amphtml-fill-content{display:block}.i-amphtml-notbuilt:not(.i-amphtml-layout-container),[layout]:not([layout=container]):not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){color:transparent!important;line-height:0!important}.i-amphtml-ghost{visibility:hidden!important}.i-amphtml-element>[placeholder],[layout]:not(.i-amphtml-element)>[placeholder],[width][height][heights]:not([layout]):not(.i-amphtml-element)>[placeholder],[width][height][sizes]:not([layout]):not(.i-amphtml-element)>[placeholder]{display:block;line-height:normal}.i-amphtml-element>[placeholder].amp-hidden,.i-amphtml-element>[placeholder].hidden{visibility:hidden}.i-amphtml-element:not(.amp-notsupported)>[fallback],.i-amphtml-layout-container>[placeholder].amp-hidden,.i-amphtml-layout-container>[placeholder].hidden{display:none}.i-amphtml-layout-size-defined>[fallback],.i-amphtml-layout-size-defined>[placeholder]{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:1}amp-img[i-amphtml-ssr]:not(.i-amphtml-element)>[placeholder]{z-index:auto}.i-amphtml-notbuilt>[placeholder]{display:block!important}.i-amphtml-hidden-by-media-query{display:none!important}.i-amphtml-element-error{background:red!important;color:#fff!important;position:relative!important}.i-amphtml-element-error:before{content:attr(error-message)}i-amp-scroll-container,i-amphtml-scroll-container{position:absolute;top:0;left:0;right:0;bottom:0;display:block}i-amp-scroll-container.amp-active,i-amphtml-scroll-container.amp-active{overflow:auto;-webkit-overflow-scrolling:touch}.i-amphtml-loading-container{display:block!important;pointer-events:none;z-index:1}.i-amphtml-notbuilt>.i-amphtml-loading-container{display:block!important}.i-amphtml-loading-container.amp-hidden{visibility:hidden}.i-amphtml-element>[overflow]{cursor:pointer;position:relative;z-index:2;visibility:hidden;display:initial;line-height:normal}.i-amphtml-layout-size-defined>[overflow]{position:absolute}.i-amphtml-element>[overflow].amp-visible{visibility:visible}template{display:none!important}.amp-border-box,.amp-border-box *,.amp-border-box :after,.amp-border-box :before{box-sizing:border-box}amp-pixel{display:none!important}amp-analytics,amp-auto-ads,amp-story-auto-ads{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}amp-story{visibility:hidden!important}html.i-amphtml-fie>amp-analytics{position:initial!important}[visible-when-invalid]:not(.visible),form [submit-error],form [submit-success],form [submitting]{display:none}amp-accordion{display:block!important}@media (min-width:1px){:where(amp-accordion>section)>:first-child{margin:0;background-color:#efefef;padding-right:20px;border:1px solid #dfdfdf}:where(amp-accordion>section)>:last-child{margin:0}}amp-accordion>section{float:none!important}amp-accordion>section>*{float:none!important;display:block!important;overflow:hidden!important;position:relative!important}amp-accordion,amp-accordion>section{margin:0}amp-accordion:not(.i-amphtml-built)>section>:last-child{display:none!important}amp-accordion:not(.i-amphtml-built)>section[expanded]>:last-child{display:block!important} +/*# sourceURL=/css/ampshared.css*/</style><script async src="https://cdn.ampproject.org/v0.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0.js" crossorigin="anonymous"></script><script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-ad-0.1.js" crossorigin="anonymous" custom-element="amp-ad"></script><script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" crossorigin="anonymous" custom-element="amp-analytics"></script><script async custom-element="amp-auto-ads" src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js" crossorigin="anonymous" custom-element="amp-auto-ads"></script><script async custom-element="amp-autocomplete" src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-autocomplete-0.1.js" crossorigin="anonymous" custom-element="amp-autocomplete"></script><script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-bind-0.1.js" crossorigin="anonymous" custom-element="amp-bind"></script><script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-consent-0.1.js" crossorigin="anonymous" custom-element="amp-consent"></script><script async custom-element="amp-font" src="https://cdn.ampproject.org/v0/amp-font-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-font-0.1.js" crossorigin="anonymous" custom-element="amp-font"></script><script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-form-0.1.js" crossorigin="anonymous" custom-element="amp-form"></script><script async custom-element="amp-fx-collection" src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.js" crossorigin="anonymous" custom-element="amp-fx-collection"></script><script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js" crossorigin="anonymous" custom-element="amp-iframe"></script><script async custom-element="amp-image-lightbox" src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-image-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-image-lightbox"></script><script async custom-element="amp-lightbox" src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-lightbox-0.1.js" crossorigin="anonymous" custom-element="amp-lightbox"></script><script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.mjs" type="module" crossorigin="anonymous"></script><script async nomodule src="https://cdn.ampproject.org/v0/amp-script-0.1.js" crossorigin="anonymous" custom-element="amp-script"></script><link rel="icon" href="/assets/images/favicon_96x96.png"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.1/css/all.css" crossorigin><title>GitHub CLI | Chris KY FUNG’s Blog</title><link rel="canonical" href="https://chriskyfung.github.io/tag/github-cli/"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"Chris KY Fung"},"description":"Feel free to bookmark this to keep an eye on my project updates","headline":"GitHub CLI","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://chriskyfung.github.io/assets/images/logo-plainSVG.svg"},"name":"Chris KY Fung"},"url":"https://chriskyfung.github.io/tag/github-cli/"}</script><link rel="preconnect dns-prefetch" href="https://www.googletagmanager.com" crossorigin><link rel="preconnect dns-prefetch" href="https://fonts.gstatic.com/" crossorigin><style amp-custom>html{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}article,aside,figcaption,figure,footer,header,main,nav,section{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}kbd,samp{font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#0275d8;text-decoration:none}abbr[title]{border-bottom:none;text-decoration:underline dotted}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:100%;margin:0}optgroup{line-height:1.15}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}textarea{overflow:auto}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote,figure{margin:0 0 1rem}img{vertical-align:middle}[role=button],a,area,button,input,label,select,summary,textarea{cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;caption-side:bottom}caption,th{text-align:left}dd,label{margin-bottom:.5rem}label{display:inline-block}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}.lead{font-size:1.25rem;font-weight:300}.small,small{font-size:80%;font-weight:400}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.img-fluid{max-width:100%;height:auto}.figure{display:inline-block}.figure-caption{font-size:90%;color:#636c72}code,pre{font-size:90%}code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code,pre code{padding:0;color:inherit;background-color:inherit}pre{display:block;margin-top:0;margin-bottom:1rem;color:#292b2c}pre code{font-size:inherit;background-color:transparent;border-radius:0}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto{-webkit-box-flex:0}.col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media (min-width:576px){.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-sm-3,.col-sm-4,.col-sm-6,.col-sm-8{-webkit-box-flex:0}.col-sm-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-4{-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-group{margin-bottom:1rem}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn:disabled{cursor:not-allowed;opacity:.65}.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}.collapsing{height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-item{padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav,.navbar-nav .row{list-style:none}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md,.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md,.navbar-toggleable-md>.container{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse,.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar-toggleable-md .navbar-collapse{width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, .5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.alert,.pagination{border-radius:.25rem}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.modal-open,.model{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}}.clearfix:after{display:block;content:"";clear:both}.justify-content-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}@media (min-width:992px){.float-lg-left{float:left}.float-lg-right{float:right}.float-lg-none{float:none}}.mr-2{margin-right:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.p-0{padding:0}.pt-3{padding-top:1rem}.ml-auto{margin-left:auto}.pr-lg-3{padding-right:1rem}.text-center{text-align:center}body,pre{font-display:swap}body{font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,sans-serif;overflow-x:hidden}.mainheading{padding:0 0 1rem}a{color:#6fd350}a,a:hover{transition:all .2s}pre{-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 1.75em;border:1px solid #e3edf3;width:100%;padding:10px;font-size:14px;white-space:pre;overflow:auto;background:#f7fafb;border-radius:3px;line-height:1.3}.mediumnavigation{background:#fff;transition:top .5s ease-in-out;padding:1.5rem 1rem;box-shadow:0 10px 40px 0 rgba(0,0,0,.05)}.navbar-toggler-right{position:absolute;right:-2%;top:0}.nav-up{box-shadow:none}.site-content{padding-top:2rem;margin-top:57px;transition:all .4s}section{margin-bottom:20px}section.featured-posts{margin-bottom:30px}section.recent-posts{margin-bottom:0}.section-title h2{font-weight:700;font-size:1.4rem;margin-bottom:27px;position:relative}.section-title h2:before{margin-bottom:0;position:absolute;z-index:1;left:15px;right:0;top:12px;height:1px;content:"";background-color:#f5f5f5}.section-title span{background-color:#fff;position:relative;z-index:2;display:inline-block;padding:0 15px 0 0;font-size:14px;text-transform:uppercase;letter-spacing:1px}.layout-page .section-title span{font-size:2rem;text-transform:none;letter-spacing:0}.layout-page .section-title h2:before{top:17px}.article-post ol,.article-post ul{margin-bottom:1.5rem}.prevnextlinks .thepostlink{padding:20px 0;font-size:17px;display:block;color:#111;font-weight:500}.prevnextlinks{border-top:1px solid #eee;border-bottom:1px solid #eee;margin-left:0;margin-right:0}.prevnextlinks .rightborder{border-right:1px solid #eee}.navbar-toggleable-md .navbar-nav .nav-link.highlight{background:#6fd350;color:#fff;border-radius:4px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);padding-left:1em;padding-right:1em}.navbar-toggler{z-index:9999}.navbar-toggleable-md .navbar-nav .nav-link{color:#333;font-size:.94em;font-weight:500;letter-spacing:1px;margin-left:0;margin-top:10px;text-transform:uppercase}.mediumnavigation .dropdown-menu{margin:0 0 15px;box-shadow:none;border:0}.card-columns .card{margin-bottom:20px}.listfeaturedtag .wrapmeta,.listfeaturedtag .wrapthumbnail{position:relative;width:100%;min-height:1px;max-width:100%;-webkit-box-flex:0;-webkit-flex:100%;-ms-flex:100%;flex:100%}.listfeaturedtag .wrapthumbnail{padding:0 15px}.listfeaturedtag .wrapmeta{padding:0}.listfeaturedtag .wrapthumbnail{height:250px}.listfeaturedtag .card{border:0;border-radius:2px;height:calc(100% - 15px);padding-left:0;margin-bottom:15px;box-shadow:1px 2px 14px 0 rgba(0,0,0,.2)}.listfeaturedtag .card-block{padding:20px 20px 50px}.listfeaturedtag .thumbnail{background-size:cover;height:100%;display:block;background-position:38% 22%;background-origin:border-box;border-top-left-radius:2px}.listfeaturedtag .card-title,.listrecent .card-title{font-size:1.3rem;font-weight:500;line-height:1.25}.listfeaturedtag .card-title a,.listrecent .card-title a{color:#111;font-weight:500}.listfeaturedtag .card-title a:hover,.listrecent .card-title a:hover{color:rgba(0,0,0,.6);text-decoration:none}.card-text{color:#666;font-size:.95rem;line-height:1.8;font-weight:400}.listfeaturedtag .wrapfooter{position:absolute;font-size:12px;display:block;width:100%;left:0;right:0;bottom:-15px;margin:auto;padding:0 20px}.listrecent{width:100%}.listrecent .wrapfooter{font-size:12px;margin-top:30px}.author-thumb{width:40px;height:40px;float:left;margin-right:13px;border-radius:100%}.intro h2,.post-top-meta{margin-bottom:1rem;margin-top:3rem}.post-top-meta span{font-size:.9rem;color:rgba(0,0,0,.44)}.post-top-meta .author-thumb{width:72px;height:72px}.post-top-meta.authorpage .author-thumb{margin-top:40px}.post-top-meta .author-description{margin-bottom:5px;margin-top:10px;font-size:.95rem}.author-meta{flex:1 1 auto;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.alertbar form,.bottompagination span.navigation i,.post-top-meta span,.share ul li,div.post-date,span.author-meta,span.post-name{display:inline-block}div.post-date,span.post-read{color:#75748a;margin:7px 0}.share ul li i.fa,span.post-read-more a{width:30px;height:30px;line-height:30px;text-align:center;border-radius:50%}span.post-read-more a{color:#75748a;align-items:center;float:right;border:1px solid #d0d0d0}span.post-name a,span.post-read-more a:hover{color:rgba(0,0,0,.8)}.dot:after{content:"\00b7";margin-left:3px;margin-right:3px}.mainheading h1.sitetitle{font-family:Georgia,Times New Roman,Times,serif;font-display:swap}.mainheading h1.posttitle{font-weight:700;font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif}.intro{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/head.svg);background-size:contain;margin-top:-87px;margin-bottom:3.5rem;padding:3rem 0;position:relative;z-index:1}.intro .btn{background:#fff100;border:0;color:#333;border-radius:3px;font-weight:500;padding:15px 40px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);text-transform:uppercase;font-size:13px;letter-spacing:1px}.intro h1{font-weight:700}.intro h2{margin-top:1rem;color:#888;line-height:1.6}.wrapintro{background:rgba(211,201,255,.871);max-width:90%;width:700px;margin:0 auto;padding:2rem 1rem;text-align:center}.article-post,.link-dark{color:rgba(0,0,0,.8)}.article-post{font-family:Cambria,Cochin,Georgia,Times,Times New Roman,serif;font-size:1.1rem;line-height:1.8}.article-post a{color:inherit;text-decoration:none;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a:hover{box-shadow:inset 0 -30px 0 #ffe51f,0 2px 0 #ffe51f;text-decoration:none}blockquote{border-left:4px solid #6fd350;padding:0 20px;font-style:italic;color:rgba(0,0,0,.5)}.article-post blockquote,.article-post p{margin:0 0 1.5rem}.featured-image{display:block;margin-bottom:2rem}.featured-image[fallback]{margin-bottom:0}.article-post amp-iframe,.article-post amp-img,.featured-image{box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.article-post p iframe{margin-bottom:.5rem}.share{text-align:center;display:none}.share p{margin-bottom:10px;font-size:.95rem}.share ul li{margin-bottom:9px}.share ul{padding-left:0;margin-left:0}.share ul li i.fa{border:1px solid #ddd}.svgIcon{vertical-align:middle}.full-width{width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.share,.share a{color:rgba(0,0,0,.44);fill:rgba(0,0,0,.44)}.graybg{background-color:#fafafa;padding:40px 0 46px;position:relative}.listrecent .card{border-radius:4px;margin-bottom:30px;box-shadow:0 0 1px 0 rgba(0,0,0,.14);border:0}.card .img-thumb{border-top-right-radius:4px;border-top-left-radius:4px}.margtop3rem{margin-top:3rem}.sep{height:1px;width:20px;background:#999;margin:0 auto 1.2rem}.btn,.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:15px}.btn{box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-weight:500;cursor:pointer}.btn,a.btn{color:#fff}.btn-group-lg>.btn,.btn-lg{padding:1rem 2rem}.btn-primary{background-color:#675bff;border-color:#483aff}.btn-primary:hover{background-color:#483aff;border-color:#372cd8}.btn.follow{border-color:#6fd350;color:#6fd350;padding:3px 10px;text-align:center;border-radius:999em;font-size:.85rem;display:inline-block;box-shadow:none;font-weight:400}.btn.subscribe{border-color:#1c9963;border-radius:30px;margin-left:10px;text-transform:uppercase}.post-top-meta .btn.follow{margin-left:5px;margin-top:-4px}.alertbar{box-shadow:0 -3px 10px 0 rgba(0,0,0,.0785);position:fixed;bottom:0;left:0;background-color:#fff;width:100%;padding:14px 0;z-index:1;display:none}.alertbar input[type=email]{font-size:.85rem;padding:3px 5px 3px 10px;border-top-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #ddd;border-right:0;margin-right:-10px;height:34px;letter-spacing:.5px;margin-left:5px}.alertbar input[type=submit],.btn.subscribe{background-color:#1c9963;color:#fff;fill:#fff;font-size:.85rem;font-weight:600}.alertbar input[type=submit]{border:1px solid #1c9963;border-radius:0;padding:4px 10px;border-top-right-radius:3px;border-bottom-right-radius:3px;height:34px;letter-spacing:.5px;cursor:pointer}.form-control::-webkit-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5)}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control::-ms-input-placeholder{color:rgba(0,0,0,.5)}.form-control{border:1px solid #eee;border-radius:0}.authorpage h1{font-weight:700;font-size:30px}.post-top-meta.authorpage .author-thumb{float:none}.authorpage .author-description{font-size:1rem;color:rgba(0,0,0,.6)}.post-top-meta.authorpage,.sociallinks a,span.navigation{text-align:center}.post-top-meta.authorpage .btn.follow{padding:7px 20px;margin-top:10px;margin-left:0;font-size:.9rem}.graybg.authorpage{border-top:1px solid #f0f0f0}.authorpostbox{width:760px;margin:0 auto 1.5rem;max-width:100%}.authorpostbox .img-thumb{width:100%}.sociallinks{margin:1rem 0}.sociallinks a{background:#666;color:#fff;width:22px;height:22px;display:inline-block;line-height:22px;border-radius:50%;font-size:12px}#comments{margin-top:3rem;margin-bottom:1.5rem}#mc_embed_signup .mc-field-group input{text-indent:5%}#mc_embed_signup{font-family:inherit}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.4;margin-top:0;margin-bottom:.5rem}.article-post h1,.article-post h2,.article-post h3,.article-post h4,.article-post h5,.article-post h6{margin-top:2rem;margin-bottom:1rem}.article-post img.shadow{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.3);-moz-box-shadow:0 0 10px 0 rgba(0,0,0,.3);box-shadow:0 0 10px 0 rgba(0,0,0,.3)}img{height:auto}.bottompagination span.navigation a{background:#fff100;color:#333;padding:5px;border-radius:3px;text-transform:none;font-weight:500;letter-spacing:0;min-width:100px;display:inline-block}.pointerup{margin-bottom:-18px;margin-left:49%;font-size:30px}.pointerup i.fa{color:#eaeaea}span.navigation{display:block;font-size:.93rem;font-weight:700;position:relative}span.navigation:before{margin-bottom:0;position:absolute;z-index:1;left:0;right:0;top:12px;height:1px;content:"";background-color:#eee}.pagination{display:inline-block;background:#fff;z-index:1;position:relative;padding:0 20px;font-size:13px;letter-spacing:.5px;font-weight:500;text-transform:uppercase}iframe,img{max-width:100%}.mediumnavigation .form-control{font-size:.8rem;border-radius:30px;overflow:hidden;border:1px solid rgba(0,0,0,.04)}.mediumnavigation .form-inline{margin-left:15px}.mediumnavigation .form-inline .btn{margin-left:-50px;border:0;border-radius:30px;cursor:pointer}.mediumnavigation .form-inline .btn:active,.mediumnavigation .form-inline .btn:hover{background:0 0;color:green}.mediumnavigation .navbar-brand{font-weight:500;padding:0}.dropdown-item{display:block;width:100%;padding:7px 1.5rem}.dropdown-menu,.mediumnavigation .nav-item{font-size:.9rem}.dropdown-menu{display:none;overflow:auto;z-index:1}.dropdown-toggle:focus~.dropdown-menu,.dropdown:hover .dropdown-menu{display:block}.dropdown:focus-within .dropdown-menu{display:block}.mediumnavigation .search-icon{margin-left:-40px;display:inline-block;margin-top:3px;cursor:pointer}.mediumnavigation .navbar-brand img{margin-right:7px;vertical-align:text-bottom;max-width:none}.navbar-collapse{border-top:1px solid #ddd}.navbar-btngroup{flex-wrap:nowrap;justify-content:right;list-style:none;margin-bottom:0;padding-left:0}.navbar-btngroup .btn{margin-left:.5rem}.navbar-nav{max-height:60vh;overflow:auto}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;overflow:hidden}.fixed-top:focus,.fixed-top:hover{overflow-x:visible;overflow-y:visible}.fixed-top:focus-within{overflow-x:visible;overflow-y:visible}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:#eee;border-radius:0 3px 3px 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#888}.searchbox{display:inline;width:calc(100% - 86px)}:root{--space-2:1rem;--space-3:1.5rem}#consent-ui,#consent-ui .container{background:#fff;font-size:.9rem;transition:right .3s ease}#consent-ui h2{display:flex;align-items:center;color:#675bff;font-size:1.6rem;column-gap:.9rem}#consent-ui .description{margin:.6rem auto .9rem}#consent-ui .description p{color:#333}#consent-ui a{color:#675bff}#consent-ui a:hover{color:#483aff;text-decoration:underline}#consent-ui .buttons{max-width:100%;width:300px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.6rem}#consent-ui .button{background-color:#fff;color:#483aff;padding:8px 16px;border:2px solid #675bff;border-radius:4px;cursor:pointer;min-width:max(140px,calc(100% / 2 - 10px));transition:all .2s ease}#consent-ui .button:hover{background-color:#483aff;color:#fff}#consent-ui .button.fill{border:none;background:#675bff;color:#fff}#consent-ui .button.fill:hover{background-color:#483aff}#cookie-consent-banner{padding:.9rem 1.5rem .1rem;display:flex;flex-wrap:wrap;justify-content:space-evenly;column-gap:.9rem}#cookie-consent-banner header{max-width:768px;min-width:min(375px,100%);width:calc(100% - 320px)}#cookie-consent-banner h2{font-size:1.25rem;column-gap:.5rem}#cookie-preference-modal{position:fixed;top:50%;left:50%;max-width:345px;width:100%;border-radius:8px;padding:1.25rem 1.5rem 1.75rem;transform:translate(-50%,-50%);box-shadow:0 5px 10px rgba(0,0,0,.1)}#consent-choices{margin:1rem;display:flex;flex-direction:column}.consentLabel input{margin:.5rem}#post-consent-ui{position:fixed;bottom:50px;left:20px;z-index:99}#post-consent-ui button{border-radius:50%;font-size:1.66rem;width:3rem;height:3rem;padding:0;border:3px solid #483aff}.invitation-codes a{background:linear-gradient(139deg,#ffc92f,#ff185c,#f316d5,#b81ed2);font-family:Arial,Helvetica,sans-serif;font-size:16px;color:#fff;font-weight:700;border-radius:5px;padding:0 10px;height:36px;display:inline-block}.invitation-codes svg{float:left;vertical-align:middle;display:inline;margin-right:4.5px;margin-left:4.5px;padding-top:7px;height:28px}.invitation-codes span{padding:0 12px;vertical-align:middle;float:left;line-height:34px}amp-ad{background-image:url(https://chriskyfung.github.io/amp-affiliately-jekyll-theme/assets/images/b8d82a619c.png);background-position:50%;background-repeat:no-repeat;background-size:50px}.article-post .anchor-link{visibility:hidden;box-shadow:none;color:#daa520;font-size:1rem;margin-left:.5rem;vertical-align:super}.article-post .anchor-link:hover{box-shadow:none}.anchor-link:focus,.article-post :hover>.anchor-link{visibility:visible}amp-img[aria-label=lightbox]{cursor:zoom-in}amp-image-lightbox img{object-fit:scale-down}amp-image-lightbox button:last-of-type{cursor:zoom-out;min-width:100%;min-height:100%}amp-image-viewer img{max-width:fit-content;transition:width .25s linear}amp-lightbox{background-color:rgba(0,0,0,.6);z-index:1050}a.vglnk{border-bottom:2px dashed grey;box-shadow:unset}.shadow-none,figure.shadow-none *{box-shadow:none}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.7rem}h4{font-size:1.48rem}h5{font-size:1.3rem}h6{font-size:1.25rem}kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 2px 0 0 hsla(0,0%,100%,.7);display:inline-block;font-size:.85em;line-height:1;padding:2px 4px;white-space:nowrap}.article-post h2:not(:first-of-type){margin-top:5rem}.article-post del{color:#999;text-decoration-color:#f05f70}.article-post del a{box-shadow:none;border-bottom:1px solid #ddd;text-decoration:inherit}.article-post .box-highlight{box-shadow:1px 2px 15px #675bff}.article-post figcaption{font-size:smaller}.article-post a>code{padding:.2rem .4rem;color:#bd4147;background-color:#f7f7f9;box-shadow:inset 0 -2px 0 #ffe51f,0 2px 0 #ffe51f}.article-post a.citation,.article-post a.footnote,.article-post a.reversefootnote{box-shadow:none;background-color:#ffe51f}.card .row,.card>a{height:100%}.container{width:96%;max-width:100%}.inline-fix+*{display:inline}.inline-fix+*+.badge{vertical-align:text-top}.listfeaturedtag .card .thumbnail img{width:500px;height:258px}.listfeaturedtag .card-list{width:100%}.listfeaturedtag .card-list .thumbnail img{width:500px;height:150px;object-fit:cover}.listfeaturedtag .card-list .card-title{font-size:1rem}.listfeaturedtag .card-list .wrapthumbnail{height:150px}.mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.thumbnail.fit-left img{object-position:left}.thumbnail.fit-right img{object-position:right}.screen-reader-only{position:absolute;left:-5000px}.screen-reader-only:focus{left:0}.left-sidebar{order:1}.sidebar{font-size:15px;max-width:100%}.sidebar h3,.sidebar h3 span{text-align:center;position:relative}.sidebar h3{font-size:1.3rem;margin-bottom:1rem;font-weight:700}.sidebar h3 span{background-color:#fff;z-index:2;display:inline-block;padding:0 15px;font-size:14px;text-transform:uppercase;letter-spacing:1px}.sidebar h3:before{margin-bottom:0;position:absolute;z-index:1;left:0;top:12px;width:100%;height:1px;content:"";background-color:#333}.sidebar ul{list-style:none;padding-left:0}.sidebar li a{color:#999;border-bottom:1px solid #f6f6f6;display:block;padding-bottom:10px;padding-top:10px}.sidebar-section{margin-bottom:2rem;padding:30px 10px 30px 20px;box-shadow:0 0 1px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup form{padding:0}.sidebar #mc_embed_signup .button{width:100%;background:#675bff;height:auto;padding:6px 20px;font-weight:600;box-shadow:0 6px 10px 0 rgba(0,0,0,.1)}.sidebar #mc_embed_signup h2{font-weight:400;font-size:15px;color:#999;margin-bottom:1rem;line-height:1.5;text-align:center}.sidebar #mc_embed_signup .mc-field-group,.sidebar #mc_embed_signup input{width:100%}.tags{list-style:none;padding-left:0;margin:0 0 1.5rem}.tags li{display:inline-block;font-size:.9rem;margin-right:.2rem}.tags li:last-child{margin-right:0}.tags li a{background:#fff100;color:#333;padding:3px 10px;border-radius:3px;font-weight:500;font-size:.93em;text-transform:capitalize;text-decoration:none;box-shadow:0 6px 10px 0 hsla(0,0%,65.9%,.1)}.tags li a:hover{background:rgba(0,0,0,.07);text-decoration:none}.tags.rounded-tags li a{background:0 0;border:1px solid;border-radius:20px}.tags.rounded-tags code a{box-shadow:inherit}.beforefooter{background:linear-gradient(rgba(255,241,0,.8),rgba(255,241,0,.8)),url(https://chriskyfung.github.io/images/header-bg.jpg);background-size:contain;background-position-x:center;background-blend-mode:overlay;color:#111;max-width:100%;margin:50px auto -50px;padding:50px 0;text-align:center}@supports (background-blend-mode:overlay){.beforefooter{background-color:#fff100;background-image:url(https://chriskyfung.github.io/images/header-bg.jpg);background-blend-mode:overlay}}.beforefooter h3{margin-bottom:1rem}.footer{background-color:#171e27;border-top:1px solid rgba(0,0,0,.05);color:#999;margin-top:50px;margin-bottom:0;padding:30px 0;text-align:center}.footer a{color:inherit}.footer a:hover{color:#fff;text-decoration:none}.footer amp-ad{max-width:1140px;margin:auto}.footer-bar{padding-top:1.5rem;font-size:.9em}.footer-bar a{color:#eee}.footer .textwidget a{border-bottom:1px dashed}.footer-widget{font-size:15px;margin-top:1rem;margin-bottom:1rem}.footer-widget .title{font-size:18px;text-transform:uppercase;letter-spacing:1px;color:#fff;margin-bottom:1.5rem}.footer-widget ul{list-style:none;padding-left:0}.footer-widget li{margin:12px 0}.footer-widget .recent-posts img{float:left;margin-right:10px}.footer-widget-blob{background:#e9e4ff;border-radius:60% 70% 500% 70%}.footer-widget-image-wrapper{display:block;margin:auto;max-width:350px}.footersocial h3{font-size:1.48rem}.footersocial .fab{width:40px;height:40px;line-height:40px;text-align:center;display:inline-block;background:#fff;border-radius:3px;box-shadow:0 6px 10px 0 rgba(0,0,0,.1);font-size:18px;margin-left:5px;color:#3c3838;margin-top:10px}.bmc-button img{height:34px;width:35px;margin-bottom:1px;box-shadow:none;border:0;vertical-align:middle}.bmc-button{line-height:35px;height:51px;display:inline-flex;background-color:#ff813f;border-radius:5px;border:1px solid transparent;padding:7px 15px 7px 10px;font-size:28px;letter-spacing:.6px;box-shadow:0 1px 2px hsla(0,0%,74.9%,.5);margin:0 auto;font-family:Cookie,cursive;-webkit-box-sizing:border-box;box-sizing:border-box}.bmc-button,.bmc-button:active,.bmc-button:focus,.bmc-button:hover{text-decoration:none;color:#fff;-webkit-box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5)}.bmc-button:active,.bmc-button:focus,.bmc-button:hover{box-shadow:0 1px 2px 2px hsla(0,0%,74.9%,.5);opacity:.85}@media (min-width:576px){.beforefooter{text-align:left}.bmc-button{font-size:16.5px}.card-columns.listfeaturedtag{-webkit-column-count:2;-moz-column-count:2;column-count:2}.footer{text-align:left}.footer-widget{margin-bottom:3rem;margin-top:3rem}.left-sidebar{order:-1}.listfeaturedtag .card .thumbnail img{left:-50%;max-width:500px;overflow-x:hidden}.listfeaturedtag .card-list .thumbnail img{width:291px}.sidebar{max-width:340px}}@media (min-width:768px){.bmc-button{font-size:28px}.listfeaturedtag .card .thumbnail img{left:-25%}.post-top-meta.authorpage{text-align:left}}@media (min-width:992px){.intro{padding:9rem 0}.intro h2{margin-top:2rem;margin-bottom:2rem}.listfeaturedtag .card{height:260px}.listfeaturedtag .card .thumbnail img{left:-75%}.listfeaturedtag .card-list{height:auto}.listfeaturedtag .card-block{padding-left:0}.listfeaturedtag .wrapfooter{padding-left:0;right:auto}.listfeaturedtag .wrapmeta{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%;margin-left:-3px}.listfeaturedtag .wrapthumbnail{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;max-width:41.666667%;height:258px;flex:0 0 auto}.mediumnavigation .dropdown-menu{box-shadow:0 0 7px rgba(0,0,0,.2);max-height:60vh}.navbar-collapse{border:0}.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.5rem;margin-top:0}.navbar-nav{max-height:60vh;overflow:visible}.wrapintro{padding:3rem}}@media (min-width:1025px){.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:.75rem}}@media (min-width:1200px){.container{width:1140px;max-width:100%}.navbar-btngroup .btn,.navbar-toggleable-md .navbar-nav .nav-link{margin-left:1rem}}@supports (object-fit:cover){.listfeaturedtag .card .thumbnail img{left:inherit;max-width:inherit;object-fit:cover}}.gh-style.btn{position:relative;display:inline-block;padding:5px 16px;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;-webkit-appearance:none;appearance:none;color:#24292e;background-color:#fafbfc;border:1px solid rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25);transition:background-color .2s cubic-bezier(.3,0,.5,1)}.gh-style.btn:hover{text-decoration:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{cursor:default}.gh-style.btn.disabled .octicon,.gh-style.btn:disabled .octicon,.gh-style.btn[aria-disabled=true] .octicon{color:inherit}.gh-style.btn i{font-style:normal;font-weight:500;opacity:.75}.gh-style.btn .octicon{margin-right:4px;color:#6a737d;vertical-align:text-bottom}.gh-style.btn .octicon:only-child{margin-right:0}.gh-style.btn .Counter{margin-left:2px;color:inherit;text-shadow:none;vertical-align:top;background-color:rgba(27,31,35,.08)}.gh-style.btn .dropdown-caret{margin-left:4px;opacity:.8}.gh-style.btn.hover,.gh-style.btn:hover,[open]>.gh-style.btn{background-color:#f3f4f6;transition-duration:.1s}.gh-style.btn.selected,.gh-style.btn:active,.gh-style.btn[aria-selected=true]{background-color:#edeff2;box-shadow:inset 0 1px 0 rgba(225,228,232,.2);transition:none}.gh-style.btn.disabled,.gh-style.btn:disabled,.gh-style.btn[aria-disabled=true]{color:#959da5;background-color:#fafbfc;border-color:rgba(27,31,35,.15)}.gh-style.btn.focus,.gh-style.btn:focus{outline:1px dotted transparent;outline-offset:2px;box-shadow:0 0 0 3px rgba(3,102,214,.3)}.gh-style.btn-primary{color:#fff;background-color:#2ea44f;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.hover,.gh-style.btn-primary:hover,[open]>.gh-style.btn-primary{background-color:#2c974b}.gh-style.btn-primary.selected,.gh-style.btn-primary:active,.gh-style.btn-primary[aria-selected=true]{background-color:#2a8f47;box-shadow:inset 0 1px 0 rgba(20,70,32,.2)}.gh-style.btn-primary.disabled,.gh-style.btn-primary:disabled,.gh-style.btn-primary[aria-disabled=true]{color:hsla(0,0%,100%,.8);background-color:#94d3a2;border-color:rgba(27,31,35,.1);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-primary.focus,.gh-style.btn-primary:focus{box-shadow:0 0 0 3px rgba(46,164,79,.4)}.gh-style.btn-primary .Counter{color:inherit;background-color:hsla(0,0%,100%,.2)}.gh-style.btn-primary .octicon{color:hsla(0,0%,100%,.8)}.gh-style.btn-danger{color:#cb2431;transition:none}.gh-style.btn-danger:hover,[open]>.gh-style.btn-danger{color:#fff;background-color:#cb2431;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-danger:hover .Counter,[open]>.gh-style.btn-danger .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-danger:hover .octicon,[open]>.gh-style.btn-danger .octicon{color:inherit}.gh-style.btn-danger.selected,.gh-style.btn-danger:active,.gh-style.btn-danger[aria-selected=true]{color:#fff;background-color:#be222e;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(134,24,29,.2)}.gh-style.btn-danger.disabled,.gh-style.btn-danger:disabled,.gh-style.btn-danger[aria-disabled=true]{color:rgba(203,36,49,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-danger.disabled .Counter,.gh-style.btn-danger:disabled .Counter,.gh-style.btn-danger[aria-disabled=true] .Counter{background-color:rgba(203,36,49,.05)}.gh-style.btn-danger:focus{box-shadow:0 0 0 3px rgba(203,36,49,.4)}.gh-style.btn-danger .Counter{color:inherit;background-color:rgba(203,36,49,.1)}.gh-style.btn-outline{color:#0366d6;transition:none}.gh-style.btn-outline:hover,[open]>.gh-style.btn-outline{color:#fff;background-color:#0366d6;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.1),inset 0 1px 0 hsla(0,0%,100%,.03)}.gh-style.btn-outline:hover .Counter,[open]>.gh-style.btn-outline .Counter{background-color:hsla(0,0%,100%,.2)}.gh-style.btn-outline:hover .octicon,[open]>.gh-style.btn-outline .octicon{color:inherit}.gh-style.btn-outline.selected,.gh-style.btn-outline:active,.gh-style.btn-outline[aria-selected=true]{color:#fff;background-color:#035fc7;border-color:rgba(27,31,35,.15);box-shadow:inset 0 1px 0 rgba(5,38,76,.2)}.gh-style.btn-outline.disabled,.gh-style.btn-outline:disabled,.gh-style.btn-outline[aria-disabled=true]{color:rgba(3,102,214,.5);background-color:#fafbfc;border-color:rgba(27,31,35,.15);box-shadow:0 1px 0 rgba(27,31,35,.04),inset 0 1px 0 hsla(0,0%,100%,.25)}.gh-style.btn-outline.disabled .Counter,.gh-style.btn-outline:disabled .Counter,.gh-style.btn-outline[aria-disabled=true] .Counter{background-color:rgba(3,102,214,.05)}.gh-style.btn-outline:focus{box-shadow:0 0 0 3px rgba(3,102,214,.4)}.gh-style.btn-outline .Counter{color:inherit;background-color:rgba(3,102,214,.1)}.gh-style.btn-blue{color:#fff;background-color:#0361cc;background-image:linear-gradient(-180deg,#0679fc,#0361cc 90%)}.gh-style.btn-blue.focus,.gh-style.btn-blue:focus{box-shadow:0 0 0 .2em rgba(6,121,252,.4)}.gh-style.btn-blue.hover,.gh-style.btn-blue:hover{background-color:#035cc2;background-image:linear-gradient(-180deg,#0374f4,#035cc2 90%);background-position:-.5em;border-color:rgba(27,31,35,.5)}.gh-style.btn-blue.selected,.gh-style.btn-blue:active,.gh-style.btn-blue[aria-selected=true],[open]>.gh-style.btn-blue{background-color:#045cc1;background-image:none;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15)}.gh-style.btn-blue.disabled,.gh-style.btn-blue:disabled,.gh-style.btn-blue[aria-disabled=true]{color:hsla(0,0%,100%,.75);background-color:#81b0e6;background-image:none;border-color:rgba(27,31,35,.15);box-shadow:none}.gh-style.btn-blue .Counter{color:#0366d6;background-color:#fff}.gh-style.btn-sm{padding:3px 12px;font-size:12px;line-height:20px}.gh-style.btn-sm .octicon{vertical-align:text-top}.gh-style.btn-large{padding:.75em 1.5em;font-size:inherit;line-height:1.5;border-radius:.5em}.gh-style.btn-block{display:block;width:100%;text-align:center}.gh-style.btnGroup{display:inline-block;vertical-align:middle}.gh-style.btnGroup:before{display:table;content:""}.gh-style.btnGroup:after{display:table;clear:both;content:""}.gh-style.btnGroup+.gh-style.btn,.gh-style.btnGroup+.gh-style.btnGroup{margin-left:4px}.gh-style.btnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.gh-style.btnGroup-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-item:last-child{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-item.selected,.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-item:hover,.gh-style.btnGroup-item[aria-selected=true]{border-right-width:1px}.gh-style.btnGroup-item.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-item.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-item,.gh-style.btnGroup-item:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-item:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-item:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-item[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-parent{float:left}.gh-style.btnGroup-parent:first-child .gh-style.btnGroup-item{border-top-left-radius:6px;border-bottom-left-radius:6px}.gh-style.btnGroup-parent:last-child .gh-style.btnGroup-item{border-right-width:1px;border-top-right-radius:6px;border-bottom-right-radius:6px}.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-right-width:0;border-radius:0}.gh-style.btnGroup-parent.selected .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true] .gh-style.btnGroup-item{border-right-width:1px}.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-item,.gh-style.btnGroup-parent.selected+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:active+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:focus+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-item,.gh-style.btnGroup-parent:hover+.gh-style.btnGroup-parent .gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-item,.gh-style.btnGroup-parent[aria-selected=true]+.gh-style.btnGroup-parent .gh-style.btnGroup-item{border-left-width:0}.gh-style.btnGroup-item:active,.gh-style.btnGroup-item:focus,.gh-style.btnGroup-parent:active,.gh-style.btnGroup-parent:focus{z-index:1}.gh-style.btn-link{display:inline-block;padding:0;font-size:inherit;color:#0366d6;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}.gh-style.btn-link:hover{text-decoration:underline}.gh-style.btn-link:disabled,.gh-style.btn-link:disabled:hover,.gh-style.btn-link[aria-disabled=true],.gh-style.btn-link[aria-disabled=true]:hover{color:rgba(88,96,105,.5);cursor:default}.gh-style.btn-invisible{color:#0366d6;background-color:transparent;border:0;border-radius:0;box-shadow:none}.gh-style.btn-invisible.selected,.gh-style.btn-invisible.zeroclipboard-is-active,.gh-style.btn-invisible.zeroclipboard-is-hover,.gh-style.btn-invisible:active,.gh-style.btn-invisible:focus,.gh-style.btn-invisible:hover,.gh-style.btn-invisible[aria-selected=true]{color:#0366d6;background:0 0;outline:0;box-shadow:none}.gh-style.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#586069;vertical-align:middle;background:0 0;border:0}.gh-style.btn-octicon:hover{color:#0366d6}.gh-style.btn-octicon.disabled,.gh-style.btn-octicon[aria-disabled=true]{color:#959da5;cursor:default}.gh-style.btn-octicon.disabled:hover,.gh-style.btn-octicon[aria-disabled=true]:hover{color:#959da5}.gh-style.btn-octicon-danger:hover{color:#cb2431}.gh-style.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.gh-style.btn-with-count:focus{z-index:1}.gh-style.btn:focus .icon-sponsor,.gh-style.btn:focus .icon-sponsoring,.gh-style.btn:hover .icon-sponsor,.gh-style.btn:hover .icon-sponsoring,.Label:focus .icon-sponsor,.Label:focus .icon-sponsoring,.Label:hover .icon-sponsor,.Label:hover .icon-sponsoring{transform:scale(1.1)}.icon-sponsor{overflow:visible}.gh-style{position:fixed;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.5}.octicon{display:inline-block;overflow:visible;vertical-align:text-bottom;fill:currentColor}</style><meta name="amp-script-src" content="sha384-n2-YMnb2FkeDk-Ca2pVnoYSR2FqNKqKgTwfK_UI0EAeVRCAHgCDjsecHJpVMv3Sl"></head><body class="layout-archive" data-amp-auto-lightbox-disable> +<amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> +</amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> +</div> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> +</li> +<li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> +</li></ul> +<ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> +<section class="row recent-posts"> <div class="section-title"> <h1><span>tag 'GitHub CLI'</span></h1> </div> <div class="masonrygrid row listrecent"> <h2 class="sr-only">Post Grid</h2><div class="col-md-6 grid-item"> <article class="card"> <a href="/github-cli-repo-clone-custom-completion/" aria-hidden="true" tabindex="-1"><figure><amp-img width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp" alt="thumbnail for Speed Up Git..." i-amphtml-ssr data-hero class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="730" height="431" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.jpg" alt="thumbnail for Speed Up Git..." class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzMSIgd2lkdGg9IjczMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> <img class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" loading="lazy" alt="thumbnail for Speed Up Git..." src="/images/posts/coding/gh-repo-clone-custom-completion-cover.webp"></amp-img></figure></a> <div class="card-block"> <h3 class="card-title"><a href="/github-cli-repo-clone-custom-completion/" rel="bookmark">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h3> <p class="card-text">Learn how to supercharge your GitHub CLI experience with custom bash completion for the 'gh repo clone' command. Includes step-by-step setup and practical examples.</p> <div class="metafooter"> <div class="wrapfooter"> <div class="after-post-tags"> <ul class="tags rounded-tags"><li> <small><a href="/tag/autocompletions/">Autocompletions</a></small> </li><li> <small><a href="/tag/bash/">Bash</a></small> </li><li> <small><a href="/tag/command-line/">Command-line</a></small> </li><li> <small><a href="/tag/github-cli/">GitHub CLI</a></small> </li></ul> </div> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="clearfix"></div> </div> </div> </div> </article> +</div> +</div> </section> </main> <aside class="col-md-4 col-lg-4 left-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/qwiklabs-badges.thumb.jpg" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform">Learning Google Cloud Platform on Qwiklabs: Learning Map, Assisti...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklabs-user-tips-for-learning-google-cloud-platform" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2020-06-20T23:36:00+08:00" itemprop="dateModified" title="Updated on">20 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in GitHub CLI" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +</div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> +</div> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +</amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> +<p>See anything that can be improved?</p> +<p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> +<a class="btn btn-primary btn-lg" href="/contact">Contact Me</a> </div> <div class="col-md-4 text-center footersocial"> <div class="mb-4"> <h3>Support Me</h3> +<a class="bmc-button" href="https://www.buymeacoffee.com/chriskyfung" data-vars-event-label="Buy me a coffee Badge"> <amp-img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" width="35" height="34" layout="fixed" alt aria-hidden="true" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:35px;height:34px;" i-amphtml-layout="fixed"></amp-img> <span style="margin-left:5px;">Buy me a coffee</span> +</a> </div> <div> <h3>Follow Me on</h3><a href="https://www.facebook.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-facebook" aria-hidden="true"></i><span class="sr-only">Facebook</span></a><a href="https://www.pinterest.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-pinterest"></i><span class="sr-only">Pinterest</span></a><a href="https://github.com/chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-github"></i><span class="sr-only">GitHub</span></a><a href="https://medium.com/@chriskyfung" rel="noopener noreferrer" target="_blank"><i class="fab fa-medium"></i><span class="sr-only">Medium</span></a> </div> </div> </div> </div> </section> <section class="footer"> <div class="container"> <div class="row"> <div class="col-sm-3"> <div class="footer-widget"> <div class="footer-widget-blob footer-widget-image-wrapper"> <amp-img class="pr-lg-3 i-amphtml-layout-responsive i-amphtml-layout-size-defined" src="/assets/images/knowledge__flatline.svg" height="179" width="255" layout="responsive" alt="ideas and knowledge" i-amphtml-layout="responsive"><i-amphtml-sizer slot="i-amphtml-svc" style="display:block;padding-top:70.1961%"></i-amphtml-sizer></amp-img> +</div> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title"></h3> +<ul></ul> </div> </div> <div class="col-sm-3"> <div class="footer-widget"> <h3 class="title">Disclosures</h3> + +<div id="copyscape-banner"> <a href="https://www.copyscape.com/" data-vars-event-label="Copyscape Badge" aria-label="Copyscape - link opens in a new tab" rel="noopener noreferrer" target="_blank"> <amp-img src="https://banners.copyscape.com/img/copyscape-banner-white-130x46.png" width="130" height="46" alt="© Protected by Copyscape" title="Opens in New Tab" style="width:130px;height:46px;width:130px;height:46px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> </amp-img> </a> +</div> </div> </div> </div> <div class="footer-bar"> <p class="float-lg-left"> Copyright © 2014-2024 <a href="https://chriskyfung.github.io/">Chris KY FUNG</a>. All rights reserved. </p> <p class="float-lg-right">Powered by <a aria-label="theme credit" href="https://chriskyfung.github.io/amp-affiliately-jekyll-theme/" rel="noopener noreferrer">AMP Affiliately Theme</a> | <a aria-label="privacy policy" href="/privacy-policy">Privacy Policy</a> </p> <div class="clearfix"></div> </div> </div> </section></footer> </div> <amp-image-lightbox id="lightbox1" layout="nodisplay" data-close-button-aria-label="Close" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"></amp-image-lightbox> </body></html> \ No newline at end of file diff --git a/tag/google-cloud/index.html b/tag/google-cloud/index.html index 3124e0be8..b5e68b28e 100644 --- a/tag/google-cloud/index.html +++ b/tag/google-cloud/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -84,19 +84,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Google Cloud" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/how-to-research/index.html b/tag/how-to-research/index.html index 4ae4f1cc5..9b4ba15fa 100644 --- a/tag/how-to-research/index.html +++ b/tag/how-to-research/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in How to research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/index.html b/tag/index.html index a63ffefd8..5f0d37bfa 100644 --- a/tag/index.html +++ b/tag/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -12,7 +12,7 @@ <li class="nav-item" role="none"> <a class="nav-link" href="/category/academic/" role="menuitem">Academic</a> </li></ul> <ul class="navbar-btngroup row ml-auto"><li class="nav-item"> <div class="invitation-codes"> <a class="btn invitation-codes-badge" href="https://invitation.codes/@chriskyfung" data-type data-vars-event-label="Invitation Code Button" aria-label="invitation.codes - link opens in a new tab" title="invitation.codes - Open in New Tab" rel="noopener noreferrer" target="_blank"> <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="comment-alt-dots" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:20px"> <path fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288zM128 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" class=""/> </svg> </a> -</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">List of Tags</h1> <div class="article-post"> <div class="tag-expo"> <ul class="tags rounded-tags"><h4 id="start-with-A">A</h4><li> <a href="/tag/android-studio/" class="post-tag">Android Studio</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/apigee/" class="post-tag">Apigee</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-B">B</h4><li> <a href="/tag/bigquery/" class="post-tag">BigQuery</a> <span class="badge badge-pill badge-primary">5</span> </li><h4 id="start-with-C">C</h4><li> <a href="/tag/changelog/" class="post-tag">Changelog</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/cloud-ai/" class="post-tag">Cloud AI</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/cloud-function/" class="post-tag">Cloud Function</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/command-line/" class="post-tag">Command-line</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/computer-science/" class="post-tag">Computer Science</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/conference/" class="post-tag">Conference</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/conference-paper/" class="post-tag">Conference paper</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/custom-theme/" class="post-tag">Custom Theme</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-D">D</h4><li> <a href="/tag/data-science/" class="post-tag">Data Science</a> <span class="badge badge-pill badge-primary">9</span> </li><li> <a href="/tag/docker/" class="post-tag">Docker</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-E">E</h4><li> <a href="/tag/email/" class="post-tag">Email</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-F">F</h4><li> <a href="/tag/file-i-o/" class="post-tag">File I/O</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/fuzzy-logic/" class="post-tag">Fuzzy Logic</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-G">G</h4><li> <a href="/tag/gcloud/" class="post-tag">GCLOUD</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/google-cloud/" class="post-tag">Google Cloud</a> <span class="badge badge-pill badge-primary">31</span> </li><h4 id="start-with-H">H</h4><li> <a href="/tag/how-to-research/" class="post-tag">How to research</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-J">J</h4><li> <a href="/tag/jekyll/" class="post-tag">Jekyll</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/jenkins/" class="post-tag">Jenkins</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/journal-ranks/" class="post-tag">Journal ranks</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-K">K</h4><li> <a href="/tag/kde/" class="post-tag">KDE</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/kubernetes/" class="post-tag">Kubernetes</a> <span class="badge badge-pill badge-primary">10</span> </li><h4 id="start-with-L">L</h4><li> <a href="/tag/lammps/" class="post-tag">LAMMPS</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/learning-map/" class="post-tag">Learning map</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/linux/" class="post-tag">Linux</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/logbook/" class="post-tag">Logbook</a> <span class="badge badge-pill badge-primary">29</span> </li><h4 id="start-with-M">M</h4><li> <a href="/tag/matlab/" class="post-tag">MATLAB</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/ms-excel/" class="post-tag">MS Excel</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/ms-office/" class="post-tag">MS Office</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/machine-learning/" class="post-tag">Machine Learning</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/medium/" class="post-tag">Medium</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/meta-tags/" class="post-tag">Meta Tags</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/molecular-dynamics/" class="post-tag">Molecular dynamics</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/mysql/" class="post-tag">MySQL</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-O">O</h4><li> <a href="/tag/ovito/" class="post-tag">OVITO</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/open-graph/" class="post-tag">Open Graph</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-P">P</h4><li> <a href="/tag/python/" class="post-tag">Python</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-Q">Q</h4><li> <a href="/tag/qwiklabs/" class="post-tag">Qwiklabs</a> <span class="badge badge-pill badge-primary">34</span> </li><h4 id="start-with-R">R</h4><li> <a href="/tag/remote-desktop/" class="post-tag">Remote desktop</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/research/" class="post-tag">Research</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/research-tool/" class="post-tag">Research tool</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-S">S</h4><li> <a href="/tag/secure-vpc/" class="post-tag">Secure VPC</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/shorthand/" class="post-tag">Shorthand</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/single-crystal-diamond/" class="post-tag">Single crystal diamond</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-T">T</h4><li> <a href="/tag/ted/" class="post-tag">TED</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/taiwan/" class="post-tag">Taiwan</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/tensorflow/" class="post-tag">TensorFlow</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/terraform/" class="post-tag">Terraform</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/tumblr/" class="post-tag">Tumblr</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/twitter/" class="post-tag">Twitter</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-U">U</h4><li> <a href="/tag/ubuntu/" class="post-tag">Ubuntu</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/user-tips/" class="post-tag">User tips</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/userscript/" class="post-tag">Userscript</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-W">W</h4><li> <a href="/tag/wsl2/" class="post-tag">WSL2</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/windows-10/" class="post-tag">Windows 10</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/windows-server/" class="post-tag">Windows server</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/wordpress/" class="post-tag">WordPress</a> <span class="badge badge-pill badge-primary">3</span> </li></ul> +</div> </li><li class="nav-item"> <a class="gh-style btn btn-block" style="margin: 2px 0" aria-label="Sponsor @chriskyfung" target="_top" href="https://github.com/sponsors/chriskyfung?o=esb"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart icon-sponsor color-fg-sponsors"> <path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"/> </svg> <span>Sponsor</span> </a> </li><li class="nav-item"> <button type="button" on="tap:amp-searchbar" id="toggle-search" class="btn btn-primary" data-toggle="modal" data-target="#searchbar" title="search" accesskey="/"> <i class="fas fa-search"></i> </button> </li> </ul> </div> </div> </nav> <amp-lightbox scrollable id="amp-searchbar" layout="nodisplay" animate-in="fade-in" hidden="hidden" class="i-amphtml-layout-nodisplay" i-amphtml-layout="nodisplay"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Search for</h5> <button class="close" type="button" on="tap:amp-searchbar.close" aria-label="Close Search Modal" tabindex="-1">×</button> </div> <div class="modal-body"> <div class="search_form"> <form method="GET" action="/search" target="_top"> <amp-autocomplete class="searchbox i-amphtml-layout-container" filter="substring" src="/assets/data/suggestions.json" i-amphtml-layout="container"> <input class="form-control" name="q" type="search" placeholder="Search" required> </amp-autocomplete> <input hidden name="sitesearch" value="chriskyfung.github.io"> <button class="btn btn-primary" type="submit">Search</button> </form> </div> </div> </div> </div> </amp-lightbox> <div class="site-content"> <div class="container"> <div class="main-content" style="margin-top: 88px;"> <div class="row"> <main class="col-md-8 col-lg-8"> <h1 class="posttitle">List of Tags</h1> <div class="article-post"> <div class="tag-expo"> <ul class="tags rounded-tags"><h4 id="start-with-A">A</h4><li> <a href="/tag/android-studio/" class="post-tag">Android Studio</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/apigee/" class="post-tag">Apigee</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/autocompletions/" class="post-tag">Autocompletions</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-B">B</h4><li> <a href="/tag/bash/" class="post-tag">Bash</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/bigquery/" class="post-tag">BigQuery</a> <span class="badge badge-pill badge-primary">5</span> </li><h4 id="start-with-C">C</h4><li> <a href="/tag/changelog/" class="post-tag">Changelog</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/cloud-ai/" class="post-tag">Cloud AI</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/cloud-function/" class="post-tag">Cloud Function</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/command-line/" class="post-tag">Command-line</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/computer-science/" class="post-tag">Computer Science</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/conference/" class="post-tag">Conference</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/conference-paper/" class="post-tag">Conference paper</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/custom-theme/" class="post-tag">Custom Theme</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-D">D</h4><li> <a href="/tag/data-science/" class="post-tag">Data Science</a> <span class="badge badge-pill badge-primary">9</span> </li><li> <a href="/tag/docker/" class="post-tag">Docker</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-E">E</h4><li> <a href="/tag/email/" class="post-tag">Email</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-F">F</h4><li> <a href="/tag/file-i-o/" class="post-tag">File I/O</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/fuzzy-logic/" class="post-tag">Fuzzy Logic</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-G">G</h4><li> <a href="/tag/gcloud/" class="post-tag">GCLOUD</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/github-cli/" class="post-tag">GitHub CLI</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/google-cloud/" class="post-tag">Google Cloud</a> <span class="badge badge-pill badge-primary">31</span> </li><h4 id="start-with-H">H</h4><li> <a href="/tag/how-to-research/" class="post-tag">How to research</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-J">J</h4><li> <a href="/tag/jekyll/" class="post-tag">Jekyll</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/jenkins/" class="post-tag">Jenkins</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/journal-ranks/" class="post-tag">Journal ranks</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-K">K</h4><li> <a href="/tag/kde/" class="post-tag">KDE</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/kubernetes/" class="post-tag">Kubernetes</a> <span class="badge badge-pill badge-primary">10</span> </li><h4 id="start-with-L">L</h4><li> <a href="/tag/lammps/" class="post-tag">LAMMPS</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/learning-map/" class="post-tag">Learning map</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/linux/" class="post-tag">Linux</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/logbook/" class="post-tag">Logbook</a> <span class="badge badge-pill badge-primary">29</span> </li><h4 id="start-with-M">M</h4><li> <a href="/tag/matlab/" class="post-tag">MATLAB</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/ms-excel/" class="post-tag">MS Excel</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/ms-office/" class="post-tag">MS Office</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/machine-learning/" class="post-tag">Machine Learning</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/medium/" class="post-tag">Medium</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/meta-tags/" class="post-tag">Meta Tags</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/molecular-dynamics/" class="post-tag">Molecular dynamics</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/mysql/" class="post-tag">MySQL</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-O">O</h4><li> <a href="/tag/ovito/" class="post-tag">OVITO</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/open-graph/" class="post-tag">Open Graph</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-P">P</h4><li> <a href="/tag/python/" class="post-tag">Python</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-Q">Q</h4><li> <a href="/tag/qwiklabs/" class="post-tag">Qwiklabs</a> <span class="badge badge-pill badge-primary">34</span> </li><h4 id="start-with-R">R</h4><li> <a href="/tag/remote-desktop/" class="post-tag">Remote desktop</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/research/" class="post-tag">Research</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/research-tool/" class="post-tag">Research tool</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-S">S</h4><li> <a href="/tag/secure-vpc/" class="post-tag">Secure VPC</a> <span class="badge badge-pill badge-primary">5</span> </li><li> <a href="/tag/shorthand/" class="post-tag">Shorthand</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/single-crystal-diamond/" class="post-tag">Single crystal diamond</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-T">T</h4><li> <a href="/tag/ted/" class="post-tag">TED</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/taiwan/" class="post-tag">Taiwan</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/tensorflow/" class="post-tag">TensorFlow</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/terraform/" class="post-tag">Terraform</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/tumblr/" class="post-tag">Tumblr</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/twitter/" class="post-tag">Twitter</a> <span class="badge badge-pill badge-primary">1</span> </li><h4 id="start-with-U">U</h4><li> <a href="/tag/ubuntu/" class="post-tag">Ubuntu</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/user-tips/" class="post-tag">User tips</a> <span class="badge badge-pill badge-primary">3</span> </li><li> <a href="/tag/userscript/" class="post-tag">Userscript</a> <span class="badge badge-pill badge-primary">2</span> </li><h4 id="start-with-W">W</h4><li> <a href="/tag/wsl2/" class="post-tag">WSL2</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/windows-10/" class="post-tag">Windows 10</a> <span class="badge badge-pill badge-primary">2</span> </li><li> <a href="/tag/windows-server/" class="post-tag">Windows server</a> <span class="badge badge-pill badge-primary">1</span> </li><li> <a href="/tag/wordpress/" class="post-tag">WordPress</a> <span class="badge badge-pill badge-primary">3</span> </li></ul> </div> </div></main> <aside class="col-md-4 col-lg-4 right-sidebar"><div class="sidebar"> <h2 class="sr-only">Sidebar</h2> <div aria-label="featured posts" class="sidebar-section"> <h3><span>Featured</span><span class="sr-only"> Posts</span></h3> <section class="featured-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp335-cover.thumb.png" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab">☁ Secure Workloads in Google Kubernetes Engine: Challenge Lab | l...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/secure-workloads-in-google-kubernetes-engine-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i><i class="fas fa-sync-alt fa-xs" aria-hidden="true" style="color:#0293d8;margin-left:-.5em;vertical-align:bottom"></i> <time datetime="2021-06-27T15:00:00+08:00" itemprop="dateModified" title="Updated on">27 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/windows/restoring-your-previous-version-of-windows-10.thumb.png" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade">Fix reboot loop after a fail upgrade of Windows 10, Version 2004,...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/windows/fix-windows10-boot-loop-after-fail-upgrade" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2020-06-23T23:18:00+08:00" itemprop="datePublished" title="Published on">23 Jun 2020</time></div> <ul class="tags"><li> <small><a href="/category/windows/">Windows</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> @@ -21,19 +21,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in List of Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/jekyll/index.html b/tag/jekyll/index.html index 8918f047e..a559e06ee 100644 --- a/tag/jekyll/index.html +++ b/tag/jekyll/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Jekyll" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/jenkins/index.html b/tag/jenkins/index.html index a3e1987e4..0b43e533d 100644 --- a/tag/jenkins/index.html +++ b/tag/jenkins/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Jenkins" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/journal-ranks/index.html b/tag/journal-ranks/index.html index c24e35d66..ba3fd37dd 100644 --- a/tag/journal-ranks/index.html +++ b/tag/journal-ranks/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Journal ranks" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/kde/index.html b/tag/kde/index.html index 96d7dd9a0..9656d8066 100644 --- a/tag/kde/index.html +++ b/tag/kde/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in KDE" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/kubernetes/index.html b/tag/kubernetes/index.html index d1c5192ad..11102173e 100644 --- a/tag/kubernetes/index.html +++ b/tag/kubernetes/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -41,19 +41,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Kubernetes" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/lammps/index.html b/tag/lammps/index.html index bcea6d778..ac429bea9 100644 --- a/tag/lammps/index.html +++ b/tag/lammps/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in LAMMPS" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/learning-map/index.html b/tag/learning-map/index.html index 7a1c9fdff..e234e6be5 100644 --- a/tag/learning-map/index.html +++ b/tag/learning-map/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Learning map" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/linux/index.html b/tag/linux/index.html index 09d9d6933..f64195f33 100644 --- a/tag/linux/index.html +++ b/tag/linux/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Linux" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/logbook/index.html b/tag/logbook/index.html index ee7645e34..945b596f0 100644 --- a/tag/logbook/index.html +++ b/tag/logbook/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -80,19 +80,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Logbook" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/machine-learning/index.html b/tag/machine-learning/index.html index 4b1ca8f18..588d69251 100644 --- a/tag/machine-learning/index.html +++ b/tag/machine-learning/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Machine Learning" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/matlab/index.html b/tag/matlab/index.html index 47de6920a..fc9e937dd 100644 --- a/tag/matlab/index.html +++ b/tag/matlab/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -32,19 +32,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in MATLAB" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/medium/index.html b/tag/medium/index.html index 6e81cc0e0..c3c15608d 100644 --- a/tag/medium/index.html +++ b/tag/medium/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Medium" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/meta-tags/index.html b/tag/meta-tags/index.html index 5a91d5d42..ac50c6118 100644 --- a/tag/meta-tags/index.html +++ b/tag/meta-tags/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Meta Tags" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/molecular-dynamics/index.html b/tag/molecular-dynamics/index.html index b3612b7d8..26150173c 100644 --- a/tag/molecular-dynamics/index.html +++ b/tag/molecular-dynamics/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -33,19 +33,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Molecular dynamics" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/ms-excel/index.html b/tag/ms-excel/index.html index ee7c1a134..c19320868 100644 --- a/tag/ms-excel/index.html +++ b/tag/ms-excel/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -24,19 +24,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in MS Excel" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/ms-office/index.html b/tag/ms-office/index.html index 250e9d8c2..a270d5425 100644 --- a/tag/ms-office/index.html +++ b/tag/ms-office/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in MS Office" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/mysql/index.html b/tag/mysql/index.html index c6249b914..148f6b9d2 100644 --- a/tag/mysql/index.html +++ b/tag/mysql/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in MySQL" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/open-graph/index.html b/tag/open-graph/index.html index aae905f95..14076d189 100644 --- a/tag/open-graph/index.html +++ b/tag/open-graph/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Open Graph" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/ovito/index.html b/tag/ovito/index.html index 509c4ff20..b67e677d4 100644 --- a/tag/ovito/index.html +++ b/tag/ovito/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in OVITO" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/python/index.html b/tag/python/index.html index 3b2766c50..1fbf1b732 100644 --- a/tag/python/index.html +++ b/tag/python/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -24,19 +24,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Python" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/qwiklabs/index.html b/tag/qwiklabs/index.html index 17496c4a1..1cc7ba2de 100644 --- a/tag/qwiklabs/index.html +++ b/tag/qwiklabs/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -90,19 +90,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Qwiklabs" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/remote-desktop/index.html b/tag/remote-desktop/index.html index e1395a68b..85247c9e0 100644 --- a/tag/remote-desktop/index.html +++ b/tag/remote-desktop/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Remote desktop" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/research-tool/index.html b/tag/research-tool/index.html index d441cd8fd..555616bb6 100644 --- a/tag/research-tool/index.html +++ b/tag/research-tool/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Research tool" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/research/index.html b/tag/research/index.html index 841fcd256..d1fe21245 100644 --- a/tag/research/index.html +++ b/tag/research/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Research" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/secure-vpc/index.html b/tag/secure-vpc/index.html index 4b781d367..81f128a0a 100644 --- a/tag/secure-vpc/index.html +++ b/tag/secure-vpc/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -31,19 +31,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Secure VPC" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/shorthand/index.html b/tag/shorthand/index.html index 22ca74698..537ebf3f0 100644 --- a/tag/shorthand/index.html +++ b/tag/shorthand/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Shorthand" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/single-crystal-diamond/index.html b/tag/single-crystal-diamond/index.html index 3652026c9..74c0c9c8b 100644 --- a/tag/single-crystal-diamond/index.html +++ b/tag/single-crystal-diamond/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Single crystal diamond" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/taiwan/index.html b/tag/taiwan/index.html index 829002d6c..759d56bac 100644 --- a/tag/taiwan/index.html +++ b/tag/taiwan/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Taiwan" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/ted/index.html b/tag/ted/index.html index d4f0e389e..2a73bb4e4 100644 --- a/tag/ted/index.html +++ b/tag/ted/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in TED" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/tensorflow/index.html b/tag/tensorflow/index.html index 78d72180c..af0687e43 100644 --- a/tag/tensorflow/index.html +++ b/tag/tensorflow/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in TensorFlow" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/terraform/index.html b/tag/terraform/index.html index 6c91f3cfd..6dc79d2cb 100644 --- a/tag/terraform/index.html +++ b/tag/terraform/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Terraform" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/tumblr/index.html b/tag/tumblr/index.html index 9e8b4345b..7f33ce57a 100644 --- a/tag/tumblr/index.html +++ b/tag/tumblr/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Tumblr" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/twitter/index.html b/tag/twitter/index.html index ecf8a1c03..9da48d8b6 100644 --- a/tag/twitter/index.html +++ b/tag/twitter/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Twitter" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/ubuntu/index.html b/tag/ubuntu/index.html index 9107d7ed3..9b24a2e4e 100644 --- a/tag/ubuntu/index.html +++ b/tag/ubuntu/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Ubuntu" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/user-tips/index.html b/tag/user-tips/index.html index 0378ceb25..a715bf514 100644 --- a/tag/user-tips/index.html +++ b/tag/user-tips/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in User tips" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/userscript/index.html b/tag/userscript/index.html index 880573f4c..d3841b886 100644 --- a/tag/userscript/index.html +++ b/tag/userscript/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Userscript" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/windows-10/index.html b/tag/windows-10/index.html index f5c41d7ab..b4ec6ab3c 100644 --- a/tag/windows-10/index.html +++ b/tag/windows-10/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -25,19 +25,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Windows 10" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/windows-server/index.html b/tag/windows-server/index.html index 26c143f95..d83e9e659 100644 --- a/tag/windows-server/index.html +++ b/tag/windows-server/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in Windows server" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/wordpress/index.html b/tag/wordpress/index.html index 8d6c5f5b9..a80cc8a44 100644 --- a/tag/wordpress/index.html +++ b/tag/wordpress/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -27,19 +27,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in WordPress" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p> diff --git a/tag/wsl2/index.html b/tag/wsl2/index.html index 33a2d1c30..010667d16 100644 --- a/tag/wsl2/index.html +++ b/tag/wsl2/index.html @@ -4,7 +4,7 @@ <amp-state id="consentState" class="i-amphtml-layout-container" i-amphtml-layout="container"> <script type="application/json">{"essential":false,"functional":false,"analytics":false,"advertising":false,"disallows":"advertising,analytics,functional"}</script> </amp-state> <amp-script script="get-stored-consentStates" nodom class="i-amphtml-layout-container" i-amphtml-layout="container"></amp-script><script id="get-stored-consentStates" type="text/plain" target="amp-script">const str=atob(localStorage.getItem("amp-store:https://chriskyfung.github.io")),json=JSON.parse(str),v=json.vv["amp-consent:site-consent"]?.v;if(1===v.s){let t=Object.fromEntries(Object.entries(v.pc).map((([t,e])=>[t,1===e])));t.disallows=Object.keys(t).sort().filter((e=>"essential"!=e&&!1===t[e])).join(","),AMP.setState({consentState:t})}</script> <amp-consent layout="nodisplay" id="site-consent" class="i-amphtml-layout-nodisplay" hidden="hidden" i-amphtml-layout="nodisplay"> <script type="application/json">{"consentInstanceId":"site-consent","consentRequired":true,"promptUI":"consent-ui","postPromptUI":"post-consent-ui","uiConfig":{"overlay":true},"purposeConsentRequired":["essential","functional","analytics","advertising"]}</script> <div id="consent-ui"> <div id="cookie-consent-banner" class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Consent </h2> <div class="description"> <p>This website use cookies to help you have a superior and more relevant browsing experience on the website. <a href="/privacy-policy"> Read more...</a></p> </div> </header> <div class="buttons"> <button id="consent-accept-all-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=true),AMP.navigateTo(url='?event=consent-accept-all')"> Accept All </button> <button id="consent-preference-button-e" class="button" [hidden]="consentState.disallows!='advertising,analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ef" class="button" hidden [hidden]="consentState.disallows!='advertising,analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ea" class="button" hidden [hidden]="consentState.disallows!='advertising,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-ev" class="button" hidden [hidden]="consentState.disallows!='analytics,functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-eav" class="button" hidden [hidden]="consentState.disallows!='functional'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efv" class="button" hidden [hidden]="consentState.disallows!='analytics'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,advertising=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-efa" class="button" hidden [hidden]="consentState.disallows!='advertising'" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true)" i-amphtml-binding> Preferences </button> <button id="consent-preference-button-all" class="button" hidden [hidden]="consentState.disallows!=''" on="tap:cookie-preference-modal.show,cookie-consent-banner.hide,site-consent.setPurpose(essential=true,functional=true,analytics=true,advertising=true)" i-amphtml-binding> Preferences </button> </div> </div> <div id="cookie-preference-modal" hidden class="container"> <header> <h2> <i class="fas fa-cookie-bite"></i> Cookie Preferences </h2> </header> <div id="consent-choices"> <label class="consentLabel" for="consent-purpose-essential"> <input id="consent-purpose-essential" type="checkbox" checked="checked" disabled="disabled" on="change:site-consent.setPurpose(essential=event.checked)"> Essential </label> <label class="consentLabel" for="consent-purpose-functional"> <input id="consent-purpose-functional" type="checkbox" [checked]="consentState.functional" on="change:site-consent.setPurpose(functional=event.checked)" i-amphtml-binding> Funcitonality </label> <label class="consentLabel" for="consent-purpose-analytics"> <input id="consent-purpose-analytics" type="checkbox" [checked]="consentState.analytics" on="change:site-consent.setPurpose(analytics=event.checked)" i-amphtml-binding> Analytics </label> <label class="consentLabel" for="consent-purpose-advertising"> <input id="consent-purpose-advertising" type="checkbox" [checked]="consentState.advertising" on="change:site-consent.setPurpose(advertising=event.checked)" i-amphtml-binding> Advertising </label> </div> <div class="buttons"> <button id="consent-accept-button" class="button fill" on="tap:site-consent.accept(purposeConsentDefault=false),AMP.navigateTo(url='?event=consent-accepted')"> Accept </button> <button id="consent-decline-button" class="button" on="tap:site-consent.setPurpose(functional=false,analytics=false,advertising=false),site-consent.reject,AMP.navigateTo(url='?event=consent-declined')"> Decline </button> </div> </div> </div> </amp-consent> <div id="post-consent-ui"> <button class="btn btn-primary" on="tap:AMP.setState({}),site-consent.prompt"><i class="fas fa-cookie-bite"></i></button> </div> - <amp-analytics config="https://www.googletagmanager.com/amp.json?id=GTM-WQMQK3X>m.url=SOURCE_URL" data-credentials="include" style="width:1px;height:1px;width:1px;height:1px;" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"></amp-analytics><amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-adtest="on" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> +<amp-auto-ads type="adsense" data-ad-client="ca-pub-4819282024314540" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" data-full-width class="i-amphtml-layout-container" i-amphtml-layout="container"> <div placeholder>Loading Ads...</div> <div fallback></div> <div overflow></div> </amp-auto-ads> <nav amp-fx="float-in-top" id="navbar" class="navbar navbar-toggleable-md navbar-light fixed-top mediumnavigation" aria-label="primary"> <div class="container" role="menu"> <a class="navbar-brand" href="/" role="menuitem" title="Go to Site Home"> <amp-img src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" style="width:140px;height:36px;width:140px;height:36px;" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" i-amphtml-layout="fixed"> <amp-img fallback src="/assets/images/logo-plainSVG.svg" alt="site logo" height="36" width="140" noloading class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:140px;height:36px;" i-amphtml-layout="fixed"></amp-img> </amp-img> </a> <a class="navbar-toggler navbar-toggler-right" href="#" on="tap:navbarsWow.toggleClass(class='show'),AMP.setState({primaryMenuExpanded: !primaryMenuExpanded}),nav-item-0.focus" data-toggle="collapse" data-target="#navbarsWow" role="button" aria-controls="navbarsWow" aria-label="Toggle navigation menu" aria-expanded="false" [aria-expanded]="primaryMenuExpanded ? 'true' : 'false'" tabindex="0" i-amphtml-binding> <span class="navbar-toggler-icon"></span> </a> <div class="collapse navbar-collapse" id="navbarsWow"> <ul class="navbar-nav ml-auto scrollbar-thin" role="menubar"> <li class="nav-item" role="none"> <a id="nav-item-0" class="nav-link" href="/" role="menuitem">Home</a></li> <li id="blog" class="nav-item dropdown" role="none"> <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" role="button" aria-controls="blog-dropdown" aria-haspopup="true" aria-expanded="false" [aria-expanded]="DropdownExpanded ? 'true' : 'false'" tabindex="0" on="tap:AMP.setState({ DropdownExpanded: !DropdownExpanded }),blog-expanded-focus.focus" i-amphtml-binding> Blog </a> <div id="blog-dropdown" class="dropdown-menu scrollbar-thin" aria-labelledby="blog"> <ul style="list-style: none; padding-left: 0;"> <li> <a id="blog-expanded-focus" class="dropdown-item" href="/blog/"> <i class="far fa-newspaper mr-2"></i>All Stories </a> </li> <li> <a class="dropdown-item" href="/category/"> <i class="far fa-list-alt mr-2"></i>Categories </a> </li> <li> <a class="dropdown-item" href="/tag/"> <i class="fas fa-tag mr-2"></i>Tags </a> </li> </ul> </div> </li> <li class="nav-item" role="none"> <a class="nav-link" href="/category/cloud/" role="menuitem">Cloud</a> @@ -23,19 +23,18 @@ </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/assets/images/write-2160925.svg" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet">Useful Google Cloud Platform Commands Cheat Sheet (15 Practical T...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/useful-google-cloud-platform-commands-cheat-sheet" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2019-11-06T13:12:00+08:00" itemprop="datePublished" title="Published on">06 Nov 2019</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> </section> </div> <div aria-label="recent posts" class="sidebar-section"> <h3><span>Recent</span><span class="sr-only"> Posts</span></h3> <section class="recent-posts"> <div class="listfeaturedtag"><div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/github-cli-repo-clone-custom-completion/"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/coding/gh-repo-clone-custom-completion-cover.thumb.jpg" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/github-cli-repo-clone-custom-completion/">Speed Up GitHub CLI: Custom Completion for 'gh repo clone' Command</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/github-cli-repo-clone-custom-completion/" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2024-12-27T15:12:00+08:00" itemprop="datePublished" title="Published on">27 Dec 2024</time></div> <ul class="tags"><li> <small><a href="/category/developer-tools/">Developer tools</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> +</div> +<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/qwiklab-completion-tracker-versions"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/science-1408800_1280.thumb.jpg" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions">Qwiklabs Lab Completion Tracker - Version History</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/qwiklab-completion-tracker-versions" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-30T18:00:00+08:00" itemprop="datePublished" title="Published on">30 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li><li> <small><a href="/category/project/">Project</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/matlab/matlab-packages-and-toolboxes"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/matlab/matlab-packages.thumb.jpg" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/matlab/matlab-packages-and-toolboxes">My MATLAB Package and Toolbox Picks</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/matlab/matlab-packages-and-toolboxes" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-09-18T01:12:00+08:00" itemprop="datePublished" title="Published on">18 Sep 2021</time></div> <ul class="tags"><li> <small><a href="/category/academic/">Academic</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> <div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp344-cover_optimized.thumb.png" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab">☁ Serverless Firebase Development: Challenge Lab | logbook</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/serverless-firebase-development-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-07-14T11:30:00+08:00" itemprop="datePublished" title="Published on">14 Jul 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> </div> -<div class="card card-list"> <div class="row"> <div class="col-md-5 wrapthumbnail"> <a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab"> <div class="thumbnail"><figure><amp-img width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.webp" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer> <amp-img fallback width="112" height="150" layout="intrinsic" src="/images/posts/qwiklabs/gsp340-cover.thumb.png" alt="Image in WSL2" class="i-amphtml-layout-intrinsic i-amphtml-layout-size-defined" i-amphtml-layout="intrinsic"><i-amphtml-sizer slot="i-amphtml-svc" class="i-amphtml-sizer"><img alt aria-hidden="true" class="i-amphtml-intrinsic-sizer" role="presentation" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE1MCIgd2lkdGg9IjExMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="></i-amphtml-sizer></amp-img> </amp-img></figure></div> </a> </div> <div class="wrapmeta"> <div class="card-block pt-3"> <h4 class="card-title"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab">☁ Build and Optimize Data Warehouses with BigQuery: Challenge Lab...</a></h4> <div class="metafooter"> <div class="wrapfooter"> <span class="post-read-more"><a href="/blog/qwiklabs/build-and-optimize-data-warehouses-with-bigquery-challenge-lab" title="Read Story"><i class="fa fa-link"></i></a></span> <div class="post-meta"> <div class="post-date"><i class="far fa-calendar-alt fa-lg" aria-hidden="true"></i> <time datetime="2021-06-25T10:30:00+08:00" itemprop="datePublished" title="Published on">25 Jun 2021</time></div> <ul class="tags"><li> <small><a href="/category/cloud/">Cloud</a></small> </li></ul> </div> <div class="clearfix"></div> </div> </div> </div> </div> </div> -</div> </div> </section> </div><div class="sidebar-section"> <h3><span aria-label="useful links">Useful</span><span class="sr-only"> Links</span></h3> <ul> <li><a href="/about">About Me</a></li> <li><a href="/#projects">My Projects</a></li> <li><a href="/contact">Partner with Me</a></li> <li><a href="https://invitation.codes/@chriskyfung" data-type="badge1" rel="noopener noreferrer" target="_blank">Use my referral codes</a></li> </ul> </div> -<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-adtest="on" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> -</div></aside> -</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"debug_mode":true,"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> +<div class="sidebar-section"> <h3><span>Ads</span></h3> <amp-ad width="100vw" height="292" data-block-on-consent-purposes="advertising" data-npa-on-unknown-consent="true" type="adsense" data-ad-client="ca-pub-4819282024314540" data-ad-slot="1391498756" data-auto-format="rspv" data-full-width class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:100vw;height:292px;" i-amphtml-layout="fixed"> <div overflow></div> <div placeholder>Loading ...</div> <div fallback>No ad for you</div> </amp-ad></div> </div></aside> +</div> <amp-analytics type="gtag" data-credentials="include" class="i-amphtml-layout-fixed i-amphtml-layout-size-defined" style="width:1px;height:1px;" i-amphtml-layout="fixed"> <script type="application/json">{"vars":{"gtag_id":"G-HP4LN87NJE","config":{"G-HP4LN87NJE":{"groups":"default"}},"ampHost":"${ampdocHost}"},"triggers":{"trackAnchorClicks":{"on":"click","selector":"a:not([href^='https://chriskyfung.github.io'])","vars":{"event_name":"outgoing_click","method":"Google","link_url":"${eventLabel}","outbound":true}}}}</script> </amp-analytics> </div> </div> <footer> <h2 class="sr-only">Footer</h2> <section class="beforefooter"> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8 mt-3"> <h3>Want to talk about a new or existing project?</h3> <p>See anything that can be improved?</p> <p>Feel free to send me a message using the form below. I will get back to you as soon as possible!</p>